设计模式:各个模式间的对比
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
歡迎跳轉到本文的原文鏈接:https://honeypps.com/design_pattern/difference-of-patterns/
##建造者模式、抽象工廠模式、工廠模式的區別
建造者模式和抽象工廠模式
與抽象工廠模式相比,建造者模式返回一個組裝好的完整產品,而抽象工廠模式返回一系列相關的產品,這些產品位于不同的產品登記結構,構成了一個產品族。
在抽象工廠模式中,客戶端實例化工廠類,然后調用工廠方法獲取所需產品對象,而在建造者模式中,客戶端可以不直接調用建造者的相關方法,而是通過指揮者類來指導如何生成對象,包括對象的組裝過程和建造步驟,它側重于一步步構造一個復雜對象,返回一個完整對象。
如果將抽象工廠模式看成汽車配件生產工廠,生產一個產品族的產品,那么建造者模式就是一個汽車組裝工廠,通過對部件的組裝可以返回一輛完整的汽車。
在建造者模式里,有個指導者,由指導者來管理建造者,用戶是與指導者聯系的,指導者聯系建造者最后得到產品。即建造模式可以強制實行一種分步驟進行的構造過程。工廠模式是將對象的全部創建過程封裝在工廠類中,由工廠類想客戶端提供最終的產品。而在建造者模式中,建造者類一般只提供產品類中各個組件的建造,而將具體建造過程交付給指導者,由指導者負責將各個組件按照特定的規則組建為產品,然后將組建好的產品交付給客戶端。
工廠方法模式和抽象工廠模式
工廠方法模式:一個抽象產品類,可以派生出多個具體產品類。每個具體工廠類智能創建一個具體產品類的實例。
抽象工廠模式:多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。一個抽象工廠類可以派生出多個具體工廠類。每個具體工廠類可以創建多個具體產品的實例。
區別:工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。工廠方法模式的具體工廠類只能創建一個具體產品類的實例,而抽象工廠模式可以創建多個。
##策略模式和工廠模式的區別
工廠模式是創建型的設計模式,它接受指令,創建出符合要求的實例;而策略模式是行為型的,它接受已經創建好的實例,實現不同的行為。
##裝飾模式、代理模式、外觀模式、適配器模式的區別
概念
適配器模式:一個適配允許通常因為接口不兼容而不能在一起工作的類工作在一起,做法是將類自己的接口包裹在一個已存在的類中。
裝飾器模式:原有的不能滿足現有的需求,對原有的進行增強。
代理模式:同一個類而去調用另一個類的方法,不對這個方法進行直接操作
外觀模式:我們通過外觀的包裝,使應用程序只能看到外觀對象,而不會看到具體的細節對象,這樣無疑會降低應用程序的復雜度,并且提高了程序的可維護性。
區別
代理模式是與原對象實現同一個接口,必須要實現原接口和持有真實的對象,才能稱之為代理類。代理模式一定是自身持有這個對象,不需要從外部傳入。用代理模式,代理類可以對它的客戶隱藏一個對象的具體信息。因此,當使用代理模式的時候,我們常常在一個代理類中創建一個對象的實例。
裝飾模式的一定是從外部傳入,并且可以沒有順序,按照代碼的實際需求隨意挑換順序。當我們使用裝飾器模式的時候,我們通常的做法是將原始對象作為一個參數傳給裝飾者的構造器。
適配器類則是匹配新接口,從代碼上的特點來說,適配類持有新的目標對象(對象適配器)。
代理模式注重的是隔離限制,關注于控制對對象的訪問,讓外部不能訪問你實際的調用對象,比如權限控制。代理和真實對象之間的的關系通常在編譯時就已經確定了。
裝飾模式注重的是功能的拓展,關注于在一個對象上動態的添加方法,在同一個方法下實現更多的功能。裝飾者能夠在運行時遞歸地被構造。
適配器模式注重的是接口的兼容。
外觀模式注重的是多個類的集成、統一適配。
##裝飾模式和代理模式的區別
裝飾器模式關注于在一個對象上動態的添加方法,然而代理模式關注于控制對對象的訪問。換句話 說,用代理模式,代理類(proxy class)可以對它的客戶隱藏一個對象的具體信息。因此,當使用代理模式的時候,我們常常在一個代理類中創建一個對象的實例。并且,當我們使用裝飾器模式的時候,我們通常的做法是將原始對象作為一個參數傳給裝飾者的構造器。
##外觀模式和代理模式的區別
代理與外觀的主要區別在于,代理對象代表一個單一對象而外觀對象代表一個子系統,代理的客戶對象無法直接訪問對象,由代理提供單獨的目標對象的訪問,而通常外觀對象提供對子系統各元件功能的簡化的共同層次的調用接口。代理是一種原來對象的代表,其他需要與這個對象打交道的操作都是和這個代表交涉的。
##外觀模式和適配器模式的區別
外觀與適配器都是對現存系統的封裝。外觀定義的新的接口,而適配器則是復用一個原有的接口,適配器是使兩個已有的接口協同工作,而外觀則是為現存系統提供一個更為方便的訪問接口。如果硬要說外觀是適配,那么適配器有用來適配對象的,而外觀是用來適配整個子系統的。也就是說,外觀所針對的對象的粒度更大。
##適配器模式和代理模式的區別
適配器模式改變所考慮的對象的接口,代理模式不能改變所代理對象的接口。
持續更新中~~~
參考資料
1.《裝飾模式、裝飾器模式、代理模式、外觀模式區別》
歡迎跳轉到本文的原文鏈接:https://honeypps.com/design_pattern/difference-of-patterns/
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
總結
以上是生活随笔為你收集整理的设计模式:各个模式间的对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式:访问者模式(Vistor)
- 下一篇: Java多线程知识小抄集(一)