日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

JAVA设计模式之抽象工厂模式和代理模式

發(fā)布時(shí)間:2025/3/15 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA设计模式之抽象工厂模式和代理模式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

一.抽象工廠模式

1.1.模式的定義與特點(diǎn)

1.2.模式的結(jié)構(gòu)

二.代理模式

2.1代理模式的定義與特點(diǎn)

2.2代理模式的結(jié)構(gòu)與實(shí)現(xiàn)


一.抽象工廠模式

1.1.模式的定義與特點(diǎn)

抽象工廠(AbstractFactory)模式的定義:是一種為訪問(wèn)類(lèi)提供一個(gè)創(chuàng)建一組相關(guān)或相互依賴(lài)對(duì)象的接口,且訪問(wèn)類(lèi)無(wú)須指定所要產(chǎn)品的具體類(lèi)就能得到同族的不同等級(jí)的產(chǎn)品的模式結(jié)構(gòu)。

使用抽象工廠模式一般要滿(mǎn)足以下條件。

  • 可以在類(lèi)的內(nèi)部對(duì)產(chǎn)品族中相關(guān)聯(lián)的多等級(jí)產(chǎn)品共同管理,而不必專(zhuān)門(mén)引入多個(gè)新的類(lèi)來(lái)進(jìn)行管理。

  • 當(dāng)需要產(chǎn)品族時(shí),抽象工廠可以保證客戶(hù)端始終只使用同一個(gè)產(chǎn)品的產(chǎn)品組。

  • 抽象工廠增強(qiáng)了程序的可擴(kuò)展性,當(dāng)增加一個(gè)新的產(chǎn)品族時(shí),不需要修改原代碼,滿(mǎn)足開(kāi)閉原則。

其缺點(diǎn)是:當(dāng)產(chǎn)品族中需要增加一個(gè)新的產(chǎn)品時(shí),所有的工廠類(lèi)都需要進(jìn)行修改。增加了系統(tǒng)的抽象性和理解難度。

1.2.模式的結(jié)構(gòu)

抽象工廠模式的主要角色如下。

  • 抽象工廠(Abstract Factory):提供了創(chuàng)建產(chǎn)品的接口,它包含多個(gè)創(chuàng)建產(chǎn)品的方法 newProduct(),可以創(chuàng)建多個(gè)不同等級(jí)的產(chǎn)品。

  • 具體工廠(Concrete Factory):主要是實(shí)現(xiàn)抽象工廠中的多個(gè)抽象方法,完成具體產(chǎn)品的創(chuàng)建。

  • 抽象產(chǎn)品(Product):定義了產(chǎn)品的規(guī)范,描述了產(chǎn)品的主要特性和功能,抽象工廠模式有多個(gè)抽象產(chǎn)品。

  • 具體產(chǎn)品(ConcreteProduct):實(shí)現(xiàn)了抽象產(chǎn)品角色所定義的接口,由具體工廠來(lái)創(chuàng)建,它同具體工廠之間是多對(duì)一的關(guān)系。

  • 抽象工廠模式的主要角色如下。

    二.代理模式

    在有些情況下,一個(gè)客戶(hù)不能或者不想直接訪問(wèn)另一個(gè)對(duì)象,這時(shí)需要找一個(gè)中介幫忙完成某項(xiàng)任務(wù),這個(gè)中介就是代理對(duì)象。例如,購(gòu)買(mǎi)火車(chē)票不一定要去火車(chē)站買(mǎi),可以通過(guò) 12306 網(wǎng)站或者去火車(chē)票代售點(diǎn)買(mǎi)。又如找女朋友、找保姆、找工作等都可以通過(guò)找中介完成。

    在軟件設(shè)計(jì)中,使用代理模式的例子也很多,例如,要訪問(wèn)的遠(yuǎn)程對(duì)象比較大(如視頻或大圖像等),其下載要花很多時(shí)間。還有因?yàn)榘踩蛐枰帘慰蛻?hù)端直接訪問(wèn)真實(shí)對(duì)象,如某單位的內(nèi)部數(shù)據(jù)庫(kù)等。

    2.1代理模式的定義與特點(diǎn)

    代理模式的定義:由于某些原因需要給某對(duì)象提供一個(gè)代理以控制對(duì)該對(duì)象的訪問(wèn)。這時(shí),訪問(wèn)對(duì)象不適合或者不能直接引用目標(biāo)對(duì)象,代理對(duì)象作為訪問(wèn)對(duì)象和目標(biāo)對(duì)象之間的中介。 代理模式的主要優(yōu)點(diǎn)有:

    • 代理模式會(huì)造成系統(tǒng)設(shè)計(jì)中類(lèi)的數(shù)量增加

    • 在客戶(hù)端和目標(biāo)對(duì)象之間增加一個(gè)代理對(duì)象,會(huì)造成請(qǐng)求處理速度變慢;

    • 增加了系統(tǒng)的復(fù)雜度;

    那么如何解決以上提到的缺點(diǎn)呢?答案是可以使用動(dòng)態(tài)代理方式

    2.2代理模式的結(jié)構(gòu)與實(shí)現(xiàn)

    代理模式的結(jié)構(gòu)比較簡(jiǎn)單,主要是通過(guò)定義一個(gè)繼承抽象主題的代理來(lái)包含真實(shí)主題,從而實(shí)現(xiàn)對(duì)真實(shí)主題的訪問(wèn),下面來(lái)分析其基本結(jié)構(gòu)和實(shí)現(xiàn)方法。 代理模式的主要角色如下。

    圖1 代理模式的結(jié)構(gòu)圖

    在代碼中,一般代理會(huì)被理解為代碼增強(qiáng),實(shí)際上就是在原代碼邏輯前后增加一些代碼邏輯,而使調(diào)用者無(wú)感知。

    • 靜態(tài):由程序員創(chuàng)建代理類(lèi)或特定工具自動(dòng)生成源代碼再對(duì)其編譯,在程序運(yùn)行前代理類(lèi)的 .class 文件就已經(jīng)存在了。

    • 動(dòng)態(tài):在程序運(yùn)行時(shí),運(yùn)用反射機(jī)制動(dòng)態(tài)創(chuàng)建而成

    動(dòng)態(tài)代理:

    public class ProxyInvocationHandler implements InvocationHandler {//被代理的接口private Object target;public void setTarget(Object target) {this.target = target;}//生成得到代理類(lèi)public Object getProxy(){return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this );}//處理代理實(shí)例,并返回結(jié)果@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object result = method.invoke(target, args);return result;}}//測(cè)試類(lèi)public class Test {public static void main(String[] args) {//真實(shí)角色Host h=new Host();//代理角色ProxyInvocationHandler p=new ProxyInvocationHandler();//通過(guò)調(diào)用程序處理角色來(lái)處理我們要調(diào)用的接口對(duì)象p.setTarget(h);//設(shè)置代理類(lèi)Rent o =(Rent) p.getProxy();//動(dòng)態(tài)生成的代理類(lèi)o.rent();} }

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的JAVA设计模式之抽象工厂模式和代理模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。