麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設計 > 正文

設計模式(十三)抽象工廠模式

2019-11-09 18:48:49
字體:
供稿:網(wǎng)友

相關文章 設計模式(一)設計六大原則 設計模式(二)單例模式的七種寫法 設計模式(三)建造者模式 設計模式(四)簡單工廠模式 設計模式(五)觀察者模式 設計模式(六)代理模式 設計模式(七)裝飾模式 設計模式(八)外觀模式 設計模式(九)模版方法模式 設計模式(十)工廠方法模式 設計模式(十一)策略模式 設計模式(十二)享元模式

前言

此前講解過簡單工廠模式和工廠模式,這一篇我們來學習工廠系列的最后一個模式抽象工廠模式,建議在閱讀此文前,請先閱讀設計模式(四)簡單工廠模式、設計模式(十)工廠方法模式這兩篇文章。

抽象工廠模式定義

抽象工廠模式可以說是是工廠方法模式的升級版,當需要創(chuàng)建的產(chǎn)品有多個產(chǎn)品線(產(chǎn)品族)時使用抽象工廠模式是比較好的選擇。那什么是多個產(chǎn)品線呢?拿我們在設計模式(四)簡單工廠模式、設計模式(十)工廠方法模式中學習的生產(chǎn)電腦的例子來舉例,我們一直都是生產(chǎn)聯(lián)想和惠普的電腦,但是電腦也有多個產(chǎn)品線:臺式機、筆記本和平板等等,聯(lián)想和惠普都在生產(chǎn)這些不同產(chǎn)品線上的電腦,使用工廠方法模式已經(jīng)滿足不了需求,這一篇文章我們就用抽象工廠模式來解決這一問題。

抽象工廠模式定義 為創(chuàng)建一組相關或者相互依賴的對象提供一個接口,而無需指定它們的具體類。

抽象工廠模式UML圖 這里寫圖片描述

在抽象工廠模式中有如下角色: - AbstractFactory:抽象工廠,它聲明了用來創(chuàng)建不同產(chǎn)品的方法。 - ConcreteFactory:具體工廠,實現(xiàn)抽象工廠中定義的創(chuàng)建產(chǎn)品的方法。 - AbstractPRoduct:抽象產(chǎn)品,為每種產(chǎn)品聲明業(yè)務方法。比如上圖的AbstractProductA和 AbstractProductB。 - ConcreteProduct:具體產(chǎn)品,定義具體工廠生產(chǎn)的具體產(chǎn)品,并實現(xiàn)抽象產(chǎn)品中定義的業(yè)務方法。

抽象工廠模式簡單實現(xiàn)

聯(lián)想和惠普生產(chǎn)的電腦分為了兩個產(chǎn)品線,一個臺式機,一個是筆記本。為了解決增加產(chǎn)品線的問題,我們用抽象工廠模式來進行實現(xiàn)。

抽象產(chǎn)品 首先定義抽象產(chǎn)品類:

public abstract class DesktopComputer { public abstract void start();}public abstract class NotebookComputer { public abstract void start();}

兩個抽象產(chǎn)品類分別為DesktopComputer和NotebookComputer ,用來定義兩個產(chǎn)品線:臺式機和筆記本。它們都定義了start方法,用來啟動電腦。 具體產(chǎn)品 具體產(chǎn)品為聯(lián)想和惠普旗下的臺式機和筆記本,如下所示。

public class LenovoDesktopComputer extends DesktopComputer { @Override public void start() { System.out.println("聯(lián)想臺式電腦啟動"); }}public class HpDesktopComputer extends DesktopComputer { @Override public void start() { System.out.println("惠普臺式電腦啟動"); }}public class LenovoNotebookComputer extends NotebookComputer { @Override public void start() { System.out.println("聯(lián)想筆記本電腦啟動"); }}public class HpNotebookComputer extends NotebookComputer { @Override public void start() { System.out.println("惠普筆記本電腦啟動"); }}

抽象工廠 接著創(chuàng)建生產(chǎn)電腦的抽象工廠,如下所示,

public abstract class ComputerFactory { public abstract DesktopComputer createDesktopComputer(); public abstract NotebookComputer createNotebookComputer();}

定義了兩個方法,分別用來生產(chǎn)臺式電腦和筆記本電腦。

具體工廠 定義聯(lián)想和惠普工廠:

public class LenovoFactory extends ComputerFactory { @Override public DesktopComputer createDesktopComputer() { return new LenovoDesktopComputer(); } @Override public NotebookComputer createNotebookComputer() { return new LenovoNotebookComputer(); }}public class HpFactory extends ComputerFactory { @Override public DesktopComputer createDesktopComputer() { return new HpDesktopComputer(); } @Override public NotebookComputer createNotebookComputer() { return new HpNotebookComputer(); }}

聯(lián)想工廠和惠普工廠用來生產(chǎn)臺式機和筆記本這兩個不同產(chǎn)品線的電腦。

客戶端調(diào)用 最后編寫客戶端:

public class Client { public static void main(String[]args) { ComputerFactory lenocoFactory=new LenovoFactory(); lenocoFactory.createDesktopComputer().start(); lenocoFactory.createNotebookComputer().start(); ComputerFactory hpFactory=new HpFactory(); hpFactory.createDesktopComputer().start(); hpFactory.createNotebookComputer().start(); }}

分別用LenovoFactory和HpFactory生產(chǎn)臺式和筆記本電腦,并調(diào)用start方法啟動它們。 運行結果為: 聯(lián)想臺式電腦啟動 聯(lián)想筆記本電腦啟動 惠普臺式電腦啟動 惠普筆記本電腦啟動

接下來給出這個例子的UML圖,更便于理解,如下所示。 這里寫圖片描述

抽象工廠模式的優(yōu)缺點

優(yōu)點 具體類的創(chuàng)建實例過程與客戶端分離,客戶端通過工廠的抽象接口操縱實例,客戶端并不知道具體的實現(xiàn)是誰。

缺點 如果增加新的產(chǎn)品族則也需要修改抽象工廠和所有的具體工廠。

抽象工廠模式的使用場景

一個系統(tǒng)不依賴于產(chǎn)品線實例如何被創(chuàng)建、組合和表達的細節(jié)。系統(tǒng)中有多于一個的產(chǎn)品線,而每次只使用其中某一產(chǎn)品線。一個產(chǎn)品線(或是一組沒有任何關系的對象)擁有相同的約束。

參考資料 《大話設計模式》 《設計模式之禪》 《Android源碼設計模式》


歡迎關注我的微信公眾號,第一時間獲得博客更新提醒,以及更多成體系的Android相關技術干貨。 掃一掃下方二維碼即可關注:

enter image description here


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 日韩黄站| 中文字幕极速在线观看 | 国产精品av久久久久久网址 | 国产精品久久久久久久久久大牛 | 日本在线免费观看视频 | 激情宗合网 | 国产精品自拍av | 精品国产一区二区三区四区在线 | 片在线观看 | 91精品国产91久久久久久不卞 | 国产精品成人一区二区三区吃奶 | 国产一区二区三区四区五区精品 | 黄色片在线免费播放 | 91精品国产777在线观看 | 黄色片免费看看 | 久久久久久麻豆 | 青青草好吊色 | 5a级毛片| 免费在线观看毛片视频 | 国产精品成人一区二区三区吃奶 | 一区二区三区日韩在线 | 久草在线视频首页 | 黄视频免费在线 | 久久一区二区三区av | 成人免费在线视频 | 欧美视频一二区 | 最近免费观看高清韩国日本大全 | www.精品一区| 92看片淫黄大片欧美看国产片 | 91小视频在线观看免费版高清 | 日本成人二区 | 狠狠干五月天 | 亚洲午夜影院在线观看 | 国产精品美女一区二区 | 欧美成人免费 | 草草在线观看 | 国产午夜精品一区二区三区四区 | 亚洲一级网站 | 国产精品亚洲一区二区三区在线观看 | 一区二区国产在线 | 黄污污网站|