天天操夜夜爱_天天插天天操天天干_黄色av地址_成人黄色在线观看_国内久久久久久_欧美国产日韩一区二区三区_国产精品久久久久久久久晋中

蘋果手機工廠模式

發(fā)布時間: 2023-02-24 03:29 閱讀: 文章來源:轉載

一. 工廠方法模式

1. 定義和特點

(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)的復雜度。

2. 具體實現(xiàn)

(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ā)架構師 相關學習資料,面試題,教學視頻,以及學習路線圖,免費分享有需要的可以點擊免費領取

二. 抽象工廠模式

1. 背景

 前面介紹【工廠方法模式】考慮的是一類產品的生產,如 形狀類只畫圖、畜牧場只養(yǎng)動物、電視機廠只生產電視機、計算機軟件學院只培養(yǎng)計算機軟件專業(yè)的學生等。

 同種類稱為同等級,也就是說:【工廠方法模式】只考慮生產同等級的產品,但是在現(xiàn)實生活中許多工廠是綜合型的工廠,能生產多等級(種類) 的產品,如 工具類既能畫圖也能染色、農場里既養(yǎng)動物又種植物,電器廠既生產電視機又生產洗衣機或空調,大學既有軟件專業(yè)又有生物專業(yè)等。

本節(jié)要介紹的【抽象工廠模式】將考慮多等級產品的生產,將同一個具體工廠所生產的位于不同等級的一組產品稱為一個產品族,圖 1 所示的是海爾工廠和 TCL 工廠所生產的電視機與空調對應的關系圖。

2. 定義和特點

(1) 定義:是一種為訪問類提供一個創(chuàng)建一組相關或相互依賴對象的接口,且訪問類無須指定所要產品的具體類就能得到同族的不同等級的產品的模式結構。抽象工廠模式是工廠方法模式的升級版本,工廠方法模式只生產一個等級的產品,而抽象工廠模式可生產多個等級的產品。

抽象工廠需要滿足下面條件:

 A. 系統(tǒng)中有多個產品族,每個具體工廠創(chuàng)建同一族但屬于不同等級結構的產品。

 B. 系統(tǒng)一次只可能消費其中某一族產品,即同族的產品一起使用。

(2).優(yōu)點

 A. 可以在類的內部對產品族中相關聯(lián)的多等級產品共同管理,而不必專門引入多個新的類來進行管理。

 B. 當增加一個新的產品族時不需要修改原代碼,滿足開閉原則。

(3).缺點

 當產品族中需要增加一個新的產品時,所有的工廠類都需要進行修改。

3. 具體實現(xiàn)

(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

???展開全文
相關文章
主站蜘蛛池模板: 久久热精品在线观看 | 中文字幕精品视频在线观 | 久久精品这里 | 天天干夜夜想 | 天天艹天天艹 | 青青草原在线免费观看 | 亚洲综合热 | 狠狠狠狼鲁欧美综合网免费 | 久久久久毛片免费观看 | 秋霞在线观看韩国理论免费 | 午夜香港三级a三级三点 | 九色欧美| 久操综合 | 亚洲综合色婷婷在线观看 | 天天操夜夜操天天操 | 日韩大片在线观看 | 99爱在线观看精品视频 | 国产午夜伦伦伦午夜伦 | 欧美黑人bbbbbbbbb | 亚洲国产成人久久综合碰 | 国内精品手机在线观看视频 | 青青草视频网 | 久久精品欧美一区二区 | 热99精品 | 男人用嘴添女人下身免费视频 | 人人看人人草 | 国产一级淫片a免费播放口 国产一级又色又爽又黄大片 | 免费黄色a级 | 久热久热 | 亚州精品永久观看视频 | 日本香港三级 | 亚洲欧美日韩中文字幕在线不卡 | 色综合天天综合网国产国产人 | 日本欧美视频在线 | 黄网站色视频免费看无下截 | 欧美xxxx做受欧美88bbw | 欧美精品一区二区三区免费播放 | 国产精品国产国产aⅴ | 日本ww| 欧美在线播放成人免费 | 乱爱妇乱子伦精品 |