導航:首頁 > 編程語言 > java設計模式代理

java設計模式代理

發布時間:2023-07-10 03:25:55

java23種設計模式

一、大約分為三類:

1、創建型模式(5種):工廠方法模式,抽象工廠模式,單例模式,建造者模式,原型模式。

2、結構型模式(7種):適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。

3、行為型模式(11種):策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。

二、設計模式遵循的原則有6個:

1、開閉原則(OpenClosePrinciple)

對擴展開放,對修改關閉。

2、里氏代換原則(LiskovPrinciple)

只有當衍生類毀吵茄可以替換掉基類,軟體單位的功能不受到影碰跡響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。

3、依賴倒轉原則(DependenceInversionPrinciple)

這個是開閉原則的基礎,對介面編程,依賴於抽象而不依賴於具體。

4、介面隔離原則(InterfaceSegregationPrinciple)

使用多個隔離的借口來降低耦合度。

5、迪米特法則(最少知道原則)(DemeterPrinciple)

一個實體應當盡量少的與其他實體之間發生相互作用,使得系統功能模塊相對獨立。

6、合成復用原則(CompositeReusePrinciple)

原則是盡量使用合成/聚合的方式,而不是使用纖察繼承。繼承實際上破壞了類的封裝性,超類的方法可能會被子類修改。

Ⅱ java設計模式都有哪些(java的設計模式有哪些)

一共23種設計模式!

按照目的來分,設計模式可以分為創建型模式、結構型模式和行為型模式。

創建型模式用來處理對象的創建過程;結構型模式用來處理類或者對象的組合;行為型模式用來對類或對象怎樣交互和怎樣分配職責進行描述。

創建型模式用來處檔滲理對象的創建過程,主要包含以下5種設計模式:

工廠方法模式(FactoryMethodPattern)

抽象工廠模式(AbstractFactoryPattern)

建造者模式(BuilderPattern)

原型模式(PrototypePattern)

單例模式(SingletonPattern)

結構型模式用來處理類或者對象的組合,主要包含以下7種設計模式:

適配器模式(AdapterPattern)

橋接模式(BridgePattern)

組合模式(CompositePattern)

裝飾者模式(DecoratorPattern)

外觀模式(FacadePattern)

享元模式(FlyweightPattern)

代理模式(ProxyPattern)

行為型模式用來對類或對象怎樣交互和怎樣分配職責進行描述,主要包含以下11種設計模式:

責任鏈模式(行悉脊ChainofPattern)

命令模式(CommandPattern)

解釋器模式(InterpreterPattern)

迭代器模式(IteratorPattern)

中介者模式(MediatorPattern)

備忘錄模式(MementoPattern)

觀察者模陸旁式(ObserverPattern)

狀態模式(StatePattern)

策略模式(StrategyPattern)

模板方法模式(TemplateMethodPattern)

訪問者模式(VisitorPattern)

推薦你一本好書:《軟體秘笈:設計模式那點事》,裡面講解的23中設計模式例子很生動,容易理解,還有JDK中設計模式應用情況,看了收獲挺大的!網路裡面搜「設計模式」,第一條中設計模式網路中就有首推該圖書,瀏覽量在20幾萬以上的,不會錯的。好東西大家一起分享!

祝你早日學會設計模式!

Ⅲ java設計模式(java設計模式有哪些)

設計模式主要分三個類型:創建型、結構型和行為型。

其中創建型有:

一、Singleton,單例模式:保證一個類只有一個實例,並提供一個訪問它的全局訪問點

二、AbstractFactory,抽象工廠:提供一個創建一系列相關或相互依賴對象的介面,而無須指定它們的具體類。

三、FactoryMethod,工廠方法:定義一個用於創建對象的介面,讓子類決定實例化哪一個類,FactoryMethod使一個類的實例化延遲到了子類。

四、Builder,建造模式:將一個復雜對象的構建與他的表示相分離,使得同樣的構建過程可以創建不同的表示。

五、Prototype,原型模式:用原型實例指定創建對象的種類,並且通過拷貝這些原型來創建新的對象。

行為型有:

六、Iterator,迭代器模式:提供一個方法順序訪問一個聚合對象的各個元素,而又不需要暴露該對象的內部表示。

七、Observer,觀察者模式:定義對象間一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知自動更新。

八、TemplateMethod,模板方法:定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變一個演算法的結構即可以重定義該演算法得某些特定步驟。

九、Command,命令模式:將一個請求封裝為一個對象,從而使你可以用不同的請求對客戶進行參數化,對請求排隊和記錄請求日誌,以及支持可撤銷的操作。

十、State,狀態模式:允許對象在其內部狀態改變時改變他的行為。對象看起來似乎改變了他的類。

十一、Strategy,策略模式:定義一系列的演算法,把他們一個個封裝起來,並使他們可以互相替換,本模式使得演算法物沖穗可以獨立於使用它們的客戶。

十二、Chinaof,職責鏈模式:使多個對象都有機會處理請求,從而避免請求的送發者和接收者之間的耦合關系

十三、Mediator,中介者模式:用一個中介對象封裝一些列的對象交互。

十四、Visitor,訪問者模式:表示一個作用於某對象結構中的各元素的操作,它使你可以在不改變各元素類的前提下定義作用於這個元素的新操作。

十五、Interpreter,解釋器模式:給定一個語言,定義他的文法的一個表示,並定義罩卜一個解釋器,這個解釋器使用該表示來解釋語言中的句子。

十六、Memento,備忘錄模式:在不破壞對象的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態。

結構型有:

十七、Composite,組合模式:將對象組合成樹形結構以表示部分整體的關系,Composite使得用戶對單個對象和組合對象的使用具有一致性。

十八、Facade,外觀模式:為子系統中的一組介面提供一致的界面,fa?ade提供了一高層介面,這個介面使得子系統更容易使用。

十九、Proxy,代理模式:為其他對象提供一種代理以控制對這個對象的訪問

二十、Adapter,適配器模式:將一類的介面轉換成客戶希望的另外一個介面,Adapter模式使得原本由於介面不兼容而不能一起工作那些類可以一起工作。

二十一、Decrator,裝飾模式:動態地給一個對象增加一些額外的職責,就增加的功能來說,Decorator模式相比生成子類更加靈活。

二十二、Bridge,橋模式:將抽象部分與它的實現部分相分離,使他們可以獨立的變化。

二十三、Flyweight,享元模式

23種設計模式要在這里詳細的都說一遍內容實在太多了啊,推薦你一本好書《軟體秘笈:設計模式那點事》,裡面講解的23中設計模式判叢例子很生動,容易理解,還有JDK中設計模式應用情況,看了收獲挺大的!網路裡面搜「設計模式」,第一條中設計模式網路中就有首推該圖書,瀏覽量在20幾萬以上的,不會錯的。

Ⅳ java常用的的設計模式和開發模式都有哪些

設計模式主要分三個類型、創建型、結構型和行為型。設計模式分:3種類型及23種模式。

JAVA中的開發模式:MVC是一個很常用的程序開發設計模式,M-Model(模型):封裝應用程序的狀態;V-View(視圖):表示用戶界面;C-Controller(控制器):對耐巧用戶的輸入作出反應,創建並設置模型。

(4)java設計模式代理擴展閱讀

創建型模式:單例模式、抽象工廠模式、建造者模式、工廠模式、原型模式。

結構型模式:適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式。

行為型模式:模版方法模式、命令模式、迭代器模式、觀察者模式、中介者模式、備告畝笑忘錄模式、解釋器模式(Interpreter模式)、狀態模式、策略模式襪含、職責鏈模式(責任鏈模式)、訪問者模式。

Ⅳ java中幾種常見的設計模式(java設計模式菜鳥教程)

1、工廠模式:客戶類和工廠類分開。消費者任何時候需要某種產品,只需向工廠請求即可。消費者無須修改就可以接納新產品。缺點是當產品修改時,工廠類也要做相應的修改。如:如何創建及如何向客戶端提供。

2、建造模式:將產品的內部表象和產品的生成過程分割開來,從而使一個建造過程生成具有不同的內部表象的產品對象。建造模式使得產品內部表象可以獨立的變化,客戶不必知道產品內部組成的細節。建造模式可以強制實行一種分步驟進行的建造過程。

3、工廠方法模式:核心工廠類不再負責所有產品的創建,而是將具體創建的工作交給子類去做,成為一個抽象工廠角色,僅負責給出具體工廠類必須實現的介面,而不接觸哪一個產品類應當被實例化這種細節。

4、原始模型模式:通過給出一個原型對象來指明所要創建的對象的類型,然後用復制這個原型對象的方法創建出更多同類型的對象。原始模型模式允許動態的增加或減少產品類,產品類不需要非得有任何事先確定的等級結構,原始模型模式適用於任何的等級結構。缺點是每一個類都必須配備一個克隆方法。

5、單例模式:單例模式確保某一個類只有一個實例,而且自行實例化並向整個系統提供這個實例單例模式。單例模式只應在有真正的「單一實例」的需求時才可使用。

6、適配器(變壓器)模式:把一個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面原因不匹配而無法一起工作的兩個類能夠一起工作。適配類可以根據參數返還一個合適的實例給客戶端。

7、橋梁模式:將抽象化與實現化脫耦,使得二者可以獨立的變化,也就是說將他們之間的強關聯變成弱關聯,也就是指在一個軟體系統的抽象化和實現化之間使用組合/聚合關系而不是繼承關系,從而使兩者可以獨立的變化。

8、合成模式:合成模式將對象組織到樹結構中,可以用來描述整體與部分的關系。合成模式就是一個處理對象的樹結構的模式。合成模式把部分與整體的關系用樹結構表示出來。合成模式使得客戶端把一個個單獨的成分對象和由他們復合而成的合成對象同等看待。

9、裝飾模式:裝飾模式以對客戶端透明的方式擴展對象的功能,是繼承關系的一個替代方案,提供比繼承更多的靈活性。動態給一個對象增加功能,這些功能可以再動態的撤消燃雀。增加由一些基本功能的排列組合而產生的非常大量的功能。

10、門面模式:外部與一個子系統的通信必須通過一個統一的門面對象進行。門面模式提供一個高層次的介面,使得子系統更易於使用。每一個子系統只有一個門面類,而且此門面類只有一個實例,也就是說它是一個單例模式。但整個系統可以有多個門面類。

11、享元模式:FLYWEIGHT在拳擊比賽中指最輕量級。享元模式以共享的方式高效的支持大量的細粒度對象。享元模式能做到共享的關鍵是區分內蘊狀態和外蘊狀態。內蘊狀態存儲在享元內部,不會隨環境的改變而有所不同。外蘊狀態是隨環境的改變而改變的。外蘊狀態不能影響內蘊狀態,它們是相互獨立的。將可以共享的狀態和不可以共享的狀態從常規類中區分開來,將不可以共享的狀態從類里剔除出去。客戶端不可以直接創簡段山建被共享的對象,而應當使用一個工廠對象負責創建被共享的對象。享元模式大幅度的降低內存中對象的數量。

12、代理模式:代理模式給某一個對象提供一個代理對象,並由代理對象控制對源對象的引用。代理就是一個人或一個機構代表攔中另一個人或者一個機構採取行動。某些情況下,客戶不想或者不能夠直接引用一個對象,代理對象可以在客戶和目標對象直接起到中介的作用。客戶端分辨不出代理主題對象與真實主題對象。代理模式可以並不知道真正的被代理對象,而僅僅持有一個被代理對象的介面,這時候代理對象不能夠創建被代理對象,被代理對象必須有系統的其他角色代為創建並傳入。

13、責任鏈模式:在責任鏈模式中,很多對象由每一個對象對其下家的引用而接

起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。客戶並不知道鏈上的哪一個對象最終處理這個請求,系統可以在不影響客戶端的情況下動態的重新組織鏈和分配責任。處理者有兩個選擇:承擔責任或者把責任推給下家。一個請求可以最終不被任何接收端對象所接受。

14、命令模式:命令模式把一個請求或者操作封裝到一個對象中。命令模式把發出命令的責任和執行命令的責任分割開,委派給不同的對象。命令模式允許請求的一方和發送的一方獨立開來,使得請求的一方不必知道接收請求的一方的介面,更不必知道請求是怎麼被接收,以及操作是否執行,何時被執行以及是怎麼被執行的。系統支持命令的撤消。

15、解釋器模式:給定一個語言後,解釋器模式可以定義出其文法的一種表示,並同時提供一個解釋器。客戶端可以使用這個解釋器來解釋這個語言中的句子。解釋器模式將描述怎樣在有了一個簡單的文法後,使用模式設計解釋這些語句。在解釋器模式裡面提到的語言是指任何解釋器對象能夠解釋的任何組合。在解釋器模式中需要定義一個代表文法的命令類的等級結構,也就是一系列的組合規則。每一個命令對象都有一個解釋方法,代表對命令對象的解釋。命令對象的等級結構中的對象的任何排列組合都是一個語言。

16、迭代子模式:迭代子模式可以順序訪問一個聚集中的元素而不必暴露聚集的內部表象。多個對象聚在一起形成的總體稱之為聚集,聚集對象是能夠包容一組對象的容器對象。迭代子模式將迭代邏輯封裝到一個獨立的子對象中,從而與聚集本身隔開。迭代子模式簡化了聚集的界面。每一個聚集對象都可以有一個或一個以上的迭代子對象,每一個迭代子的迭代狀態可以是彼此獨立的。迭代演算法可以獨立於聚集角色變化。

17、調停者模式:調停者模式包裝了一系列對象相互作用的方式,使得這些對象不必相互明顯作用。從而使他們可以鬆散偶合。當某些對象之間的作用發生改變時,不會立即影響其他的一些對象之間的作用。保證這些作用可以彼此獨立的變化。調停者模式將多對多的相互作用轉化為一對多的相互作用。調停者模式將對象的行為和協作抽象化,把對象在小尺度的行為上與其他對象的相互作用分開處理。

18、備忘錄模式:備忘錄對象是一個用來存儲另外一個對象內部狀態的快照的對象。備忘錄模式的用意是在不破壞封裝的條件下,將一個對象的狀態捉住,並外部化,存儲起來,從而可以在將來合適的時候把這個對象還原到存儲起來的狀態。

19、觀察者模式:觀察者模式定義了一種一隊多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態上發生變化時,會通知所有觀察者對象,使他們能夠自動更新自己。

20、狀態模式:狀態模式允許一個對象在其內部狀態改變的時候改變行為。這個對象看上去象是改變了它的類一樣。狀態模式把所研究的對象的行為包裝在不同的狀態對象里,每一個狀態對象都屬於一個抽象狀態類的一個子類。狀態模式的意圖是讓一個對象在其內部狀態改變的時候,其行為也隨之改變。狀態模式需要對每一個系統可能取得的狀態創立一個狀態類的子類。當系統的狀態變化時,系統便改變所選的子類。

21、策略模式:策略模式針對一組演算法,將每一個演算法封裝到具有共同介面的獨立的類中,從而使得它們可以相互替換。策略模式使得演算法可以在不影響到客戶端的情況下發生變化。策略模式把行為和環境分開。環境類負責維持和查詢行為類,各種演算法在具體的策略類中提供。由於演算法和環境獨立開來,演算法的增減,修改都不會影響到環境和客戶端。

22、模板方法模式:模板方法模式准備一個抽象類,將部分邏輯以具體方法以及具體構造子的形式實現,然後聲明一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。先制定一個頂級邏輯框架,而將邏輯的細節留給具體的子類去實現。

23、訪問者模式:訪問者模式的目的是封裝一些施加於某種數據結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的數據結構可以保持不變。訪問者模式適用於數據結構相對未定的系統,它把數據結構和作用於結構上的操作之間的耦合解脫開,使得操作集合可以相對自由的演化。訪問者模式使得增加新的操作變的很容易,就是增加一個新的訪問者類。訪問者模式將有關的行為集中到一個訪問者對象中,而不是分散到一個個的節點類中。當使用訪問者模式時,要將盡可能多的對象瀏覽邏輯放在訪問者類中,而不是放到它的子類中。訪問者模式可以跨過幾個類的等級結構訪問屬於不同的等級結構的成員類。

Ⅵ Java靜態代理和iOS代理模式這兩個概念的理解上的疑惑

java靜態代理模式,舉例給你,看下如何理解:
public class Ts {
public static void main(String[] args) throws Exception {
// 通過中介公司生產一批衣服
ClothingProct cp = new ProxCompany( new LiNingCompany());
cp.proctClothing();
}

}

/**
* 定義生產一批衣服功能的介面
*
*/
interface ClothingProct {

void proctClothing(); // 有生產一批衣服的功能

}

/**
*
* 代理類:中介公司
*
*/
class ProxCompany implements ClothingProct {

private ClothingProct cp ; // 中介公司不會生產衣服,需要找一家真正能生產衣服的公司

ProxCompany(ClothingProct cp) {
super ();
this . cp = cp;
}

@Override
public void proctClothing() {

System. out .println( "收取1塊錢的中介費" );
cp .proctClothing();

}

}

/**
*
* 李寧公司是生產服裝的目標類
*
*/
class LiNingCompany implements ClothingProct {

@Override
public void proctClothing() {

System. out .println( "生產一批衣服。。。。" );
}

}

上面程序的做法,使用的模式是靜態代理模式

靜態代理模式在現實編程中的弊端:
它的特徵是代理類和目標對象的類都是在編譯期間確定下來的,不利於程序上的擴展,上面示例中,如果客戶還想找一個「生產一批鞋子」的工廠,那麼還需要新增加一個代理類和一個目標類。如果客戶還需要很多其他的服務,就必須一一的添加代理類和目標類。那就需要寫很多的代理類和目標類

代理模式到底做了什麼?
我眼中的代理模式只有兩個關注點:協議和代理者
協議定義了一組方法,由某一個類負責實現。
代理者作為某個類的一個屬性,通常是另一個類的實例對象,可以負責完成原來這個類不方便或者無法完成的任務。
首先談一談代理者,在腦中重新回想一下代理模式的實現過程。在頁面B中定義一個代理對象的時候,好像和定義一個普通的property非常類似(除了 weak和id《delegate》>)。這也正是我對代理的概括:代理本來就是一個屬性而已,並沒有非常神秘。
當然,代理者並不只是一個類普通的屬性,否則我只需要重寫一下B的初始化方法即可達到同樣的效果:
self.BVC = [[BViewController alloc]initWithDelegate:self];

然後在BViewController.m中定義一個AViewController *AVC並在初始化方法中賦值即可。
注意到代理者在定義的時候,格式往往是這樣的:
id <SomeDelegate> delegate;

所以我對代理的優勢的理解是:
代理的核心優勢在於解耦
與直接聲明一個屬於某個固定的類的代理者相比,聲明為id的代理者具備兩個明星的優勢。
允許多個不同的類成為本類的代理。試想一下在本文例子中,如果頁面B可以跳轉回N個頁面,如果還是通過聲明一個普通對象的方式,那怎麼辦?
允許代理者的類還不固定。試想一下,UITableView也有delegate,它根本不知道那個類會成為它的代理者。
再看一看協議。協議更加簡單了。協議只是定義了一組方法。在代理模式中,完全可以不用在頁面B中定義一個協議,然後A再去遵循這個協議。直接調用A的方法即可。
個人認為協議的優點在於以下幾點:
可以利用Xcode的檢查機制。對於定義為@required的方法,如果實現了協議而沒有實現這個方法,編譯器將會有警告。這樣可以防止因為疏忽,忘記實現某個代碼的情況,而由於OC的運行時特性,這樣的錯誤往往在運行階段才會導致程序崩潰。
有利於代碼的封裝。如果一個類,實現了某個協議,那麼這個協議中的方法不必在.h中被聲明,就可以被定義協議的類調用。這樣可以減少一個類暴露給外部的方法。
有利於程序的結構化與層次化。一個協議往往是解決問題的某個方法,對於一個其他的不過卻類似的問題,我們只用再次實現協議即可,避免了自己再次構思一組方法。協議的繼承機制使得這一有點更加強大。
說了怎麼多,總結起來只有一句:代理模式並不神秘,只是一個經過了優化的小技巧(讓某個類持有另一個類的指針)。代理和協議也只是讓程序耦合度更低,結構感更強而已。

閱讀全文

與java設計模式代理相關的資料

熱點內容
庫房管理系統源碼 瀏覽:59
安卓應用多為什麼會卡 瀏覽:10
php程序員工作職責 瀏覽:306
程序員可以轉行做運維嗎 瀏覽:323
如何檢測到伺服器埠是否通 瀏覽:851
linuxsed正則 瀏覽:109
linux安裝gz文件 瀏覽:357
linux如何卸載編譯的軟體 瀏覽:929
高三解壓活動視頻 瀏覽:780
如何把伺服器卡爆 瀏覽:949
餓了么java程序員 瀏覽:960
python編譯時找不到路徑 瀏覽:910
jpg轉換pdf軟體 瀏覽:103
php讀取json文件 瀏覽:866
螺桿壓縮機的功率計算 瀏覽:74
谷輪壓縮機c 瀏覽:338
蘋果app如何復制到另一個手機 瀏覽:834
javasession超時 瀏覽:831
易金通app怎麼更改手機號 瀏覽:493
plc數控編程的方法 瀏覽:989