java设计模式--工厂模式
首先,简单工厂:
public class SimplePhoneFactory {public static Cellphone getCellphone(String type){if("iPhone".equals(type)){return new IPhone();}else if("Samsung".equals(type)) {return new Samsung();}else {throw new RuntimeException("没有正确的手机类型创建");}}
}
工厂方法:
/*工厂方法接口 */
public interface PhoneFactory {public Cellphone getPhone();
}
/* * @Description: iPhone 工厂*/
public class IPhoneFactory implements PhoneFactory{@Overridepublic Cellphone getPhone() {// TODO Auto-generated method stubreturn new IPhone();}}
/* * @Description:samsung工厂*/
public class SamsungPhoneFactory implements PhoneFactory{@Overridepublic Cellphone getPhone() {// TODO Auto-generated method stubreturn new Samsung();}}
以上代码可以看出,每个产品都需要自己的实现工厂,这时如果我们需要新增加新产品,比如小米手机,只需要新增一个MIPhoneFactory来实现PhoneFactory即可。
抽象工厂:
public interface CPU {void run();void start();
}
//高端CPU
class GoodCUP implements CPU{@Overridepublic void run() {System.out.println("高端CPU运转方法。。。");}@Overridepublic void start() {System.out.println("高端CPU开始方法。。。");}}//低端CPU
class BadCPU implements CPU{@Overridepublic void run() {System.out.println("低端CPU运转方法。。。");}@Overridepublic void start() {System.out.println("低端CPU开始方法。。。");}}
然后是相机接口,以及相关的相机生产类型,其中的方法是随便写的。
public interface Camera {public void take();}class GoodCamera implements Camera{@Overridepublic void take() {System.out.println("高端相机拍照。。。");}}class BadCamera implements Camera{@Overridepublic void take() {System.out.println("低端相机拍照。。。");}}
最后一个内存的接口已经一系列类型:
public interface Memory {void work();
}class GoodMemory implements Memory{@Overridepublic void work() {System.out.println("高性能内存工作");}}
class BadMemory implements Memory{@Overridepublic void work() {System.out.println("低性能内存工作");}}
我们前面说了,抽象工厂就是利用一些列组件组合产品的工厂,上面我们写的CPU,相机,内存都是我们要组件手机的组件。现在,我们开始写我们的抽象工厂。当然为了方便,肯定要有工厂接口:
public interface AbPhoneFactory {CPU getCPU();Camera getCamera();Memory getMemory();
}
然后,我们根据自己的需要,随机组合几种组件,即可得到我们的产品,当然这是一组(产品)组合出来的最终产品。
比如我们用好的CPU,好的内存,好的相机组合成一个好的手机:
public class GoodsPhoneFactory implements AbPhoneFactory{@Overridepublic CPU getCPU() {// TODO Auto-generated method stubreturn new GoodCUP();}@Overridepublic Camera getCamera() {// TODO Auto-generated method stubreturn new GoodCamera();}@Overridepublic Memory getMemory() {// TODO Auto-generated method stubreturn new GoodMemory();}}
也可以用差的CPU,差的内存,差的相机组合成比较差劲的手机:
public class BadPhoneFactory implements AbPhoneFactory{@Overridepublic CPU getCPU() {// TODO Auto-generated method stubreturn new BadCPU();}@Overridepublic Camera getCamera() {// TODO Auto-generated method stubreturn new BadCamera();}@Overridepublic Memory getMemory() {// TODO Auto-generated method stubreturn new BadMemory();}}
当然你也可以乱组合成中等的,这都是随你便了,只要加一个工厂实现即可。
最后,我们来总结一下吧:
对于单一产品,简单工厂更简单,但是新增产品时却很乏力,或者说不符合设计原则,而工厂方法是不修改原有类的前提下,新增工厂类实现,更符合设计原则。是不是我们在单一产品的时候就该选择工厂方法了呢?下面给出这么一个对比:
-- 结构复杂度 简单工厂更加简单 简单工厂优于工厂方法
-- 代码复杂度 工厂方法复杂度较高 简单工厂优于工厂方法
-- 客户端编程难度 工厂方法客户端需要了解更多的实现工厂 简单工厂优于工厂方法
-- 管理难度 工厂方法由于实现工厂类较多,管理更难 简单工厂优于工厂方法
结合以上四点,我们说简单工厂比工厂方法更加易用。这也就是开发时候简单工厂比工厂方法使用的更多的原因。
对于产品族,如果使用工厂模式,唯一的选择--抽象工厂。
OK,更多详细代码和本次测试代码请参考github:https://github.com/LiuJishuai/designPatterns。
转载于:https://www.cnblogs.com/jeyson/p/5892601.html
java设计模式--工厂模式相关推荐
- Java设计模式-工厂模式(3)抽象工厂模式
在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...
- Java设计模式-工厂模式(2)工厂方法模式
在Java设计模式-工厂模式(1)简单工厂模式 中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而"工厂方法模式"是对简单工厂模式的进一步抽象化,其好处是可以使系统在不 ...
- Java设计模式-工厂模式(1)简单工厂模式
Java设计模式-工厂模式(1)简单工厂模式 一.前言 1)例子 2)类图关系 3)代码实现 二.简单工厂模式 2.1.概述: 2.2.类图关系: 2.3.代码修改: 2.4.优缺点 2.5.扩展-简 ...
- java设计模式工厂模式_Java中的工厂设计模式
java设计模式工厂模式 Welcome to the Factory Design Pattern in Java tutorial. Factory Pattern is one of the C ...
- java设计模式工厂模式_Java中的复合设计模式
java设计模式工厂模式 Composite pattern is one of the Structural design pattern. Composite design pattern is ...
- java设计模式工厂模式_Java中的桥梁设计模式
java设计模式工厂模式 Today we will look into Bridge Design Pattern in java. When we have interface hierarchi ...
- java设计模式工厂模式_Java中的外观设计模式
java设计模式工厂模式 Facade Design Pattern is one of the Structural design patterns (such as Adapter pattern ...
- java 工厂模式的写法_[java设计模式] 工厂模式解析
什么是工厂模式? 我的总结是: 遵守软件设计中的开闭原则和依赖反转原则, 并且客户端只需通过参数来创造多个对象, 并且在创建过程中,创建对象的过程对客户端是透明的. 这种开发模式叫做工厂模式. 出现原 ...
- 10.Java设计模式 工厂模式,单例模式
Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...
- 学习:java设计模式—工厂模式
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Facto ...
最新文章
- 五年程序员败在阿里三面,还是Java底层原理的问题啊!
- AGC005D ~K Perm Counting
- AWS 日本出现大规模故障
- 491. 递增子序列(回溯算法)
- 关于三维莫队问题的一些思考和探究
- 保25ms争10ms——Zenlayer如何保持出海业务的超低延时
- 甲骨文是否可以要求 Java API 享有版权?这场10年官司怎么结
- python线程等待_python3 中 Event.wait 多线程等待
- mac上配置mysql与redis server,并结合Pydev准备某爬虫环境
- java jobdetail_spring+quartz定时任务配置---JobDetailBean
- Linux运维人员共用root帐户权限审计
- python写彩票程序30选7_写一个彩票程序:30选7
- 高中计算机期末工作总结,高中信息技术期末教学工作总结
- Netty 解决TCP粘包/半包使用
- 国产双模蓝牙芯片简介
- P1137【旅行计划】
- ELK基于ElastAlert实现日志的微信报警
- 筑巢引凤 - 男人25后是蓝筹股
- 毕索大学计算机科学怎么样,毕索大学与麦吉尔大学哪个好
- Linux上安装软件软件汇总
热门文章
- MySQL数据同步,出现Slave_SQL_Running:no和slave_io_running:no问题的解决方法
- 从思维导图学习操作系统(二)
- STM32开发 -- 可调直流稳压电源
- STM32开发 -- Git的详细使用
- Andriod 破解之道(一)
- 爬虫总结(五)-- 其他技巧
- html.编辑数据回显,从HTML表格编辑/更新MySQL数据库值
- keil2c语言使用教程,Keil教程(2)
- JZOJ 5275. 水管
- 给计算机系统的资产分配的记号被称为什么,哈工大2015计算机复试试题(25页)-原创力文档...