电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

一文看懂JAVA設計模式之工廠模式

瀏覽:69日期:2022-08-31 16:06:13

工廠顧名思義就是創建產品,根據產品是具體產品還是具體工廠可分為簡單工廠模式和工廠方法模式,根據工廠的抽象程度可分為工廠方法模式和抽象工廠模式。該模式用于封裝和管理對象的創建,是一種創建型模式。本文從一個具體的例子逐步深入分析,來體會三種工廠模式的應用場景和利弊。

1. 簡單工廠模式

該模式對對象創建管理方式最為簡單,因為其僅僅簡單的對不同類對象的創建進行了一層薄薄的封裝。該模式通過向工廠傳遞類型來指定要創建的對象,其UML類圖如下:

一文看懂JAVA設計模式之工廠模式

下面我們使用手機生產來講解該模式:

Phone類:手機標準規范類(AbstractProduct)

public interface Phone { void make();}

MiPhone類:制造小米手機(Product1)

public class MiPhone implements Phone { public MiPhone() { this.make(); } @Override public void make() { // TODO Auto-generated method stub System.out.println('make xiaomi phone!'); }}

IPhone類:制造蘋果手機(Product2)

public class IPhone implements Phone { public IPhone() { this.make(); } @Override public void make() { // TODO Auto-generated method stub System.out.println('make iphone!'); }}

PhoneFactory類:手機代工廠(Factory)

public class PhoneFactory { public Phone makePhone(String phoneType) { if(phoneType.equalsIgnoreCase('MiPhone')){ return new MiPhone(); } else if(phoneType.equalsIgnoreCase('iPhone')) { return new IPhone(); } return null; }}

演示:

public class Demo { public static void main(String[] arg) { PhoneFactory factory = new PhoneFactory(); Phone miPhone = factory.makePhone('MiPhone'); // make xiaomi phone! IPhone iPhone = (IPhone)factory.makePhone('iPhone'); // make iphone! }}

2. 工廠方法模式(Factory Method)

和簡單工廠模式中工廠負責生產所有產品相比,工廠方法模式將生成具體產品的任務分發給具體的產品工廠,其UML類圖如下:

一文看懂JAVA設計模式之工廠模式

也就是定義一個抽象工廠,其定義了產品的生產接口,但不負責具體的產品,將生產任務交給不同的派生類工廠。這樣不用通過指定類型來創建對象了。

接下來繼續使用生產手機的例子來講解該模式。

其中和產品相關的Phone類、MiPhone類和IPhone類的定義不變。

AbstractFactory類:生產不同產品的工廠的抽象類

public interface AbstractFactory { Phone makePhone();}

XiaoMiFactory類:生產小米手機的工廠(ConcreteFactory1)

public class XiaoMiFactory implements AbstractFactory{ @Override public Phone makePhone() { return new MiPhone(); }}

AppleFactory類:生產蘋果手機的工廠(ConcreteFactory2)

public class AppleFactory implements AbstractFactory { @Override public Phone makePhone() { return new IPhone(); }}

演示

public class Demo { public static void main(String[] arg) { AbstractFactory miFactory = new XiaoMiFactory(); AbstractFactory appleFactory = new AppleFactory(); miFactory.makePhone(); // make xiaomi phone! appleFactory.makePhone(); // make iphone! }}

3. 抽象工廠模式(Abstract Factory)

上面兩種模式不管工廠怎么拆分抽象,都只是針對一類產品Phone(AbstractProduct),如果要生成另一種產品PC,應該怎么表示呢?

最簡單的方式是把2中介紹的工廠方法模式完全復制一份,不過這次生產的是PC。但同時也就意味著我們要完全復制和修改Phone生產管理的所有代碼,顯然這是一個笨辦法,并不利于擴展和維護。

抽象工廠模式通過在AbstarctFactory中增加創建產品的接口,并在具體子工廠中實現新加產品的創建,當然前提是子工廠支持生產該產品。否則繼承的這個接口可以什么也不干。

其UML類圖如下:

一文看懂JAVA設計模式之工廠模式

從上面類圖結構中可以清楚的看到如何在工廠方法模式中通過增加新產品接口來實現產品的增加的。

接下來我們繼續通過小米和蘋果產品生產的例子來解釋該模式。

為了弄清楚上面的結構,我們使用具體的產品和工廠來表示上面的UML類圖,能更加清晰的看出模式是如何演變的:

一文看懂JAVA設計模式之工廠模式

PC類:定義PC產品的接口(AbstractPC)

public interface PC { void make();}

MiPC類:定義小米電腦產品(MIPC)

public class MiPC implements PC { public MiPC() { this.make(); } @Override public void make() { // TODO Auto-generated method stub System.out.println('make xiaomi PC!'); }}

MAC類:定義蘋果電腦產品(MAC)

public class MAC implements PC { public MAC() { this.make(); } @Override public void make() { // TODO Auto-generated method stub System.out.println('make MAC!'); }}

下面需要修改工廠相關的類的定義:

AbstractFactory類:增加PC產品制造接口

public interface AbstractFactory { Phone makePhone(); PC makePC();}

XiaoMiFactory類:增加小米PC的制造(ConcreteFactory1)

public class XiaoMiFactory implements AbstractFactory{ @Override public Phone makePhone() { return new MiPhone(); } @Override public PC makePC() { return new MiPC(); }}

AppleFactory類:增加蘋果PC的制造(ConcreteFactory2)

public class AppleFactory implements AbstractFactory { @Override public Phone makePhone() { return new IPhone(); } @Override public PC makePC() { return new MAC(); }}

演示:

public class Demo { public static void main(String[] arg) { AbstractFactory miFactory = new XiaoMiFactory(); AbstractFactory appleFactory = new AppleFactory(); miFactory.makePhone(); // make xiaomi phone! miFactory.makePC(); // make xiaomi PC! appleFactory.makePhone(); // make iphone! appleFactory.makePC(); // make MAC! }}

總結:

上面介紹的三種工廠模式有各自的應用場景,實際應用時能解決問題滿足需求即可,可靈活變通,無所謂高級與低級。

此外無論哪種模式,由于可能封裝了大量對象和工廠創建,新加產品需要修改已定義好的工廠相關的類,因此對于產品和工廠的擴展不太友好,利弊需要權衡一下。

以上就是一文看懂JAVA設計模式之工廠模式的詳細內容,更多關于JAVA 設計模式之工廠模式的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 办公室装修_上海办公室设计装修_时尚办公新主张-后街印象 | 5L旋转蒸发器-20L-50L旋转蒸发器-上海越众仪器设备有限公司 | 无刷电机_直流无刷电机_行星减速机-佛山市藤尺机电设备有限公司 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 光纤测温-荧光光纤测温系统-福州华光天锐光电科技有限公司 | 河南中专学校|职高|技校招生-河南中职中专网 | 蜘蛛车-高空作业平台-升降机-高空作业车租赁-臂式伸缩臂叉装车-登高车出租厂家 - 普雷斯特机械设备(北京)有限公司 | 快速门厂家-快速卷帘门-工业快速门-硬质快速门-西朗门业 | 济南侦探调查-济南调查取证-山东私家侦探-山东白豹调查咨询公司 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 活性氧化铝球|氧化铝干燥剂|分子筛干燥剂|氢氧化铝粉-淄博同心材料有限公司 | 游动电流仪-流通式浊度分析仪-杰普仪器(上海)有限公司 | 博博会2021_中国博物馆及相关产品与技术博览会【博博会】 | 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 河南凯邦机械制造有限公司 | 赛尔特智能移动阳光房-阳光房厂家-赛尔特建筑科技(广东)有限公司 | 山东艾德实业有限公司 | 艺术涂料_进口艺术涂料_艺术涂料加盟_艺术涂料十大品牌 -英国蒙太奇艺术涂料 | 液压升降货梯_导轨式升降货梯厂家_升降货梯厂家-河南东圣升降设备有限公司 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | CCE素质教育博览会 | CCE素博会 | 教育展 | 美育展 | 科教展 | 素质教育展 | 电动车头盔厂家_赠品头盔_安全帽批发_山东摩托车头盔—临沂承福头盔 | 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 微型驱动系统解决方案-深圳市兆威机电股份有限公司 | 盘装氧量分析仪-防爆壁挂氧化锆分析仪-安徽吉帆仪表有限公司 | 安徽合肥项目申报咨询公司_安徽合肥高新企业项目申报_安徽省科技项目申报代理 | 首页|专注深圳注册公司,代理记账报税,注册商标代理,工商变更,企业400电话等企业一站式服务-慧用心 | 成都APP开发-成都App定制-成都app开发公司-【未来久】 | 电子万能试验机_液压拉力试验机_冲击疲劳试验机_材料试验机厂家-济南众标仪器设备有限公司 | 自动气象站_气象站监测设备_全自动气象站设备_雨量监测站-山东风途物联网 | 广西教师资格网-广西教师资格证考试网| 全钢实验台,实验室工作台厂家-无锡市辰之航装饰材料有限公司 | 维泰克Veertek-锂电池微短路检测_锂电池腐蚀检测_锂电池漏液检测 | 上海阳光泵业制造有限公司 -【官方网站】 | pH污水传感器电极,溶解氧电极传感器-上海科蓝仪表科技有限公司 | wika威卡压力表-wika压力变送器-德国wika代理-威卡总代-北京博朗宁科技 | 英国雷迪地下管线探测仪-雷迪RD8100管线仪-多功能数字听漏仪-北京迪瑞进创科技有限公司 | 一体化预制泵站-一体化提升泵站-一体化泵站厂家-山东康威环保 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 耐火浇注料-喷涂料-浇注料生产厂家_郑州市元领耐火材料有限公司 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 流程管理|流程管理软件|企业流程管理|微宏科技-AlphaFlow_流程管理系统软件服务商 | 杭州月嫂技术培训服务公司-催乳师培训中心报名费用-产后康复师培训机构-杭州优贝姆健康管理有限公司 |