oppo手機工廠模式
解釋:工廠模式的目的在于當實例化某個對象時,用戶不需要知道它的內部細節(jié),只需要知道創(chuàng)建對象的入口(接口)1. 結構和原理簡單工廠模式的原理是把某些類的實例化工作交由一個獨立的類來完成,這個獨立的類就稱...
2025.07.02COPYRIGHT ? 2023
粵ICP備2021108052號
郵箱:611661226@qq.com
留言給我(1). 定義:定義一個創(chuàng)建產品對象的工廠接口,然后把產品對象的實際創(chuàng)建工作放到具體的子類工廠當中實現(xiàn)。
PS:
① 我們把被創(chuàng)建的對象成為“產品”,創(chuàng)建產品的對象稱為“工廠”。如果創(chuàng)建的產品不多,且基本不會增加新產品,只需要一個工廠類即可,這種模式叫做“簡單工廠”,它不屬于23種設計模式,它的缺點是違背了開閉原則。
② 此處的介紹的‘抽象工廠’,是對簡單工廠模式的進一步抽象化,其好處是可以使系統(tǒng)在不修改原來代碼的情況下引進新的產品,即滿足開閉原則。
(2). 優(yōu)點:
A. 用戶只需要知道具體工廠的名稱就可得到所要的產品,無須知道產品的具體創(chuàng)建過程.
B. 在系統(tǒng)增加新的產品時只需要添加具體產品類和對應的具體工廠類,無須對原工廠進行任何修改,滿足開閉原則.
(3). 缺點:
每增加一個產品就要增加一個具體產品類和一個對應的具體工廠類,這增加了系統(tǒng)的復雜度。
(1). 模式的結構
A. 抽象工廠(Abstract Factory):提供了創(chuàng)建產品的接口,調用者通過它訪問具體工廠的工廠方法 如: newProduct() 來創(chuàng)建產品。
B. 具體工廠(ConcreteFactory):主要是實現(xiàn)抽象工廠中的抽象方法,完成具體產品的創(chuàng)建。
C. 抽象產品(Product):定義了產品的規(guī)范,描述了產品的主要特性和功能。
D. 具體產品(ConcreteProduct):實現(xiàn)了抽象產品角色所定義的接口,由具體工廠來創(chuàng)建,它同具體工廠之間一一對應。
結構圖如下:
(2). 應用場景
需要畫各種圖,比如Circle、Rectangle、Square,首先要有一個Draw方法,我們可以把它抽象成一個接口,讓每個形狀類去實現(xiàn)它;形狀類的創(chuàng)建我們采用工廠去創(chuàng)建,可以先抽象出來一個工廠接口,聲明創(chuàng)建對象的方法CreateShape,然后讓每個形狀的子工廠去實現(xiàn)它。
如果形狀有限,且不經(jīng)常添加,直接創(chuàng)建一個簡單工廠來實例化各個形狀類即可。
(3). 代碼實操
形狀類代碼:
/// /// 形狀接口/// public interface IShape{/// /// 畫圖方法/// public void Draw();}/// /// 圓形/// public class Circle : IShape{public void Draw(){Console.WriteLine("畫出一個圓形");}} /// /// 矩形/// public class Rectangle : IShape{public void Draw(){Console.WriteLine("畫出一個矩形區(qū)域");}} /// /// 正方形/// public class Square : IShape{public void Draw(){Console.WriteLine("畫出一個正方形區(qū)域");}}
簡單工廠代碼:
/// /// 形狀工廠類 (簡單工廠)/// public class SimpleFactory{/// /// 通過名稱獲取對應的形狀類/// /// /// public IShape getShape(String shapeType){if (shapeType == null){return null;}if (shapeType.Equals("CIRCLE")){return new Circle();}else if (shapeType.Equals("RECTANGLE")){return new Rectangle();}else if (shapeType.Equals("SQUARE")){return new Square();}return null;}}
工廠方法代碼:
/// /// 抽象所有工廠的接口/// public interface AbstractFactory{//創(chuàng)建具體的‘對象’接口IShape CreateShape();}/// /// Circle工廠類/// public class CircleFactory : AbstractFactory{public IShape CreateShape(){return new Circle();}}/// /// Rectangle工廠類/// public class RectangleFactory : AbstractFactory{public IShape CreateShape(){return new Rectangle();}}/// /// Square工廠類/// public class SquareFactory : AbstractFactory{public IShape CreateShape(){return new Square();}}
測試結果:
//簡單工廠的實現(xiàn){Console.WriteLine("-------------------下面簡單工廠的實現(xiàn)------------------------");SimpleFactory shapeFactory = new SimpleFactory();//獲取 Circle 的對象,并調用它的 draw 方法IShape shape1 = shapeFactory.getShape("CIRCLE");shape1.Draw();//獲取 Rectangle 的對象,并調用它的 draw 方法IShape shape2 = shapeFactory.getShape("RECTANGLE");shape2.Draw();//獲取 Square 的對象,并調用它的 draw 方法IShape shape3 = shapeFactory.getShape("SQUARE");shape3.Draw();}//工廠方法的實現(xiàn){Console.WriteLine("-------------------下面工廠方法的實現(xiàn)------------------------");//獲取 Circle 的對象,并調用它的 draw 方法AbstractFactory f1 = new CircleFactory();IShape shape1 = f1.CreateShape();shape1.Draw();//獲取 Rectangle 的對象,并調用它的 draw 方法AbstractFactory f2 = new RectangleFactory();IShape shape2 = f2.CreateShape();shape2.Draw();//獲取 Square 的對象,并調用它的 draw 方法AbstractFactory f3 = new CircleFactory();IShape shape3 = f3.CreateShape();shape3.Draw();}
運行結果:
更多C++后臺開發(fā)技術點知識內容包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒體,音視頻開發(fā),Linux內核,TCP/IP,協(xié)程,DPDK多個高級知識點。
C/C++后臺開發(fā)架構師免費學習地址:
【文章福利】另外還整理一些C++后臺開發(fā)架構師 相關學習資料,面試題,教學視頻,以及學習路線圖,免費分享有需要的可以點擊免費領取
前面介紹【工廠方法模式】考慮的是一類產品的生產,如 形狀類只畫圖、畜牧場只養(yǎng)動物、電視機廠只生產電視機、計算機軟件學院只培養(yǎng)計算機軟件專業(yè)的學生等。
同種類稱為同等級,也就是說:【工廠方法模式】只考慮生產同等級的產品,但是在現(xiàn)實生活中許多工廠是綜合型的工廠,能生產多等級(種類) 的產品,如 工具類既能畫圖也能染色、農場里既養(yǎng)動物又種植物,電器廠既生產電視機又生產洗衣機或空調,大學既有軟件專業(yè)又有生物專業(yè)等。
本節(jié)要介紹的【抽象工廠模式】將考慮多等級產品的生產,將同一個具體工廠所生產的位于不同等級的一組產品稱為一個產品族,圖 1 所示的是海爾工廠和 TCL 工廠所生產的電視機與空調對應的關系圖。
(1) 定義:是一種為訪問類提供一個創(chuàng)建一組相關或相互依賴對象的接口,且訪問類無須指定所要產品的具體類就能得到同族的不同等級的產品的模式結構。抽象工廠模式是工廠方法模式的升級版本,工廠方法模式只生產一個等級的產品,而抽象工廠模式可生產多個等級的產品。
抽象工廠需要滿足下面條件:
A. 系統(tǒng)中有多個產品族,每個具體工廠創(chuàng)建同一族但屬于不同等級結構的產品。
B. 系統(tǒng)一次只可能消費其中某一族產品,即同族的產品一起使用。
(2).優(yōu)點
A. 可以在類的內部對產品族中相關聯(lián)的多等級產品共同管理,而不必專門引入多個新的類來進行管理。
B. 當增加一個新的產品族時不需要修改原代碼,滿足開閉原則。
(3).缺點
當產品族中需要增加一個新的產品時,所有的工廠類都需要進行修改。
(1). 模式的結構
抽象工廠模式同工廠方法模式一樣,也是由抽象工廠、具體工廠、抽象產品和具體產品等 4 個要素構成,但抽象工廠中方法個數(shù)不同,抽象產品的個數(shù)也不同。
A. 抽象工廠(Abstract Factory):提供了創(chuàng)建產品的接口,它包含多個創(chuàng)建產品的方法 newProduct(),可以創(chuàng)建多個不同等級的產品。
B. 具體工廠(Concrete Factory):主要是實現(xiàn)抽象工廠中的多個抽象方法,完成具體產品的創(chuàng)建。
C. 抽象產品(Product):定義了產品的規(guī)范,描述了產品的主要特性和功能,抽象工廠模式有多個抽象產品。
D. 具體產品(ConcreteProduct):實現(xiàn)了抽象產品角色所定義的接口,由具體工廠來創(chuàng)建,它 同具體工廠之間是多對一的關系。
結構圖如下:
(2). 應用場景
我既要畫圖又要染色,且畫圖和染色有個對應關系:Circle對應Blue,Rectangle對應Green, 這個時候我們就要使用抽象工廠模式, 形狀和顏色屬于‘同族下的不同產品’,設計抽象工廠,定義創(chuàng)建形狀和創(chuàng)建顏色的方法,同時設計多個子工廠,每個子工廠繼承抽象工廠,并且實現(xiàn)屬于自己的形狀和顏色的創(chuàng)建。
(3). 代碼實操
具體產品類(形狀和顏色)
/// /// 形狀接口/// public interface IShape2{/// /// 畫圖方法/// public void Draw();}/// /// 圓形/// public class Circle2 : IShape2{public void Draw(){Console.WriteLine("畫出一個圓形");}}/// /// 矩形/// public class Rectangle2 : IShape2{public void Draw(){Console.WriteLine("畫出一個矩形區(qū)域");}} /// ///顏色接口/// public interface IColor2{/// /// 填充顏色方法/// public void Fill();}class Blue2 : IColor2{public void Fill(){Console.WriteLine("Inside Blue:我是藍色");}}class Green2 : IColor2{public void Fill(){Console.WriteLine("Inside Green:我是綠色");}}
抽象工廠類和子工廠代碼
/// /// 抽象工廠/// 核心:在一個工廠里聚合多個同類產品。/// (這里也可以定義成接口)/// public abstract class AbstractFactory2{public abstract IColor2 CreateColor();public abstract IShape2 CreateShape();}/// /// 工廠1/// (用來圖Blue2色 和 創(chuàng)建Cicle2形狀)/// public class ConcreteFactory1 : AbstractFactory2{public override IColor2 CreateColor(){return new Blue2();}public override IShape2 CreateShape(){return new Circle2();}}/// /// 工廠2/// (用來圖Blue2色 和 創(chuàng)建Cicle2形狀)/// public class ConcreteFactory2 : AbstractFactory2{public override IColor2 CreateColor(){return new Green2();}public override IShape2 CreateShape(){return new Rectangle2();}}
測試代碼
//工廠1 畫圖并填充顏色AbstractFactory2 f1 =newConcreteFactory1();IShape2 s1 = f1.CreateShape();IColor2 c1 = f1.CreateColor();s1.Draw();c1.Fill();//工廠2 畫圖并填充顏色AbstractFactory2 f2 = new ConcreteFactory2();IShape2 s2 = f2.CreateShape();IColor2 c2 = f2.CreateColor();s2.Draw();c2.Fill();
運行結果
原文鏈接:https://www.cnblogs.com/yaopengfei/p/13428543.html
解釋:工廠模式的目的在于當實例化某個對象時,用戶不需要知道它的內部細節(jié),只需要知道創(chuàng)建對象的入口(接口)1. 結構和原理簡單工廠模式的原理是把某些類的實例化工作交由一個獨立的類來完成,這個獨立的類就稱...
2025.07.02C11的三種駕駛模式零跑C11具有多種駕駛模式,今天讓我們來聊聊幾種駕駛模式的區(qū)別吧,也供大家選擇更適合自己的駕駛模式。輕松模式,加速穩(wěn)重。輕松模式適合人群,為開燃油車習慣之人。該模式下車輛主要表現(xiàn)為...
2025.06.28不管是安卓手機還是蘋果iPhone手機,大家在使用一段時間后,會發(fā)現(xiàn)自己的手機每次充飽電后的使用時間越來越短,也就是感覺自己的電池沒有以前耐用了,這是因為現(xiàn)在大部分智能手機,配備的都是鋰電池,而鋰電池...
2025.06.28昨天微信暗黑模式被微博刷屏了,從去年一直等到現(xiàn)在,想來用蘋果手機的小伙伴們都很期待非常漂亮的微信暗黑模式,畢竟晚上看微信的話也能保護眼睛。其實,不必等騰訊更新,我們完全可以搶先體驗微信暗黑模式,那阿俊...
2025.07.02在線下手機店里常常有銷售員宣傳某款手機像素高,拍照清晰,但拿到手以后卻感覺照片很糊,難道這手機的像素是假的?當然不會是這樣的,只是用戶被唯像素論的宣傳說法欺騙了。也就是像素高的手機拍照不一定會更清晰。...
2025.06.28