博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式(四)工厂方法模式
阅读量:5923 次
发布时间:2019-06-19

本文共 2194 字,大约阅读时间需要 7 分钟。

1.工厂方法模式简介

定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。

2.工厂方法模式简单实现

我接着举电脑生产的例子。

①创建抽象产品

电脑产品类,它有一个start方法用于启动电脑:

public abstract class Computer{    public abstract void start();}

 ②创建具体产品

具体的电脑产品分别是联想、惠普和华硕电脑:

public class LenovoComputer extends Computer {    @Override    public void start() {        System.out.println("联想电脑启动");    }}public class HpComputer extends Computer {    @Override    public void start() {        System.out.println("惠普电脑启动");    }}public class AsusComputer extends Computer{    @Override    public void start() {        System.out.println("华硕电脑启动");    }}
View Code

③创建抽象工厂

里面有一个createComputer方法,想生产哪个品牌的电脑就生产那个:

public abstract class ComputerFactory {    public abstract 
T createComputer(Class
clz);}

④具体工厂

广达代工厂是一个具体的工厂,他继承抽象工厂,通过反射来生产不同厂家的电脑:

/** * 广达代工厂 */public class GDComputerFactor extends ComputerFactory {    @Override    public 
T createComputer(Class
clz) { Computer computer=null; String classname=clz.getName(); try { //通过反射来生产不同厂家的电脑 computer= (Computer) Class.forName(classname).newInstance(); } catch (Exception e) { e.printStackTrace(); } return (T) computer; }}

⑤客户端调用

public class Client {    public static void main(String[]args) {        ComputerFactory computerFactory = new GDComputerFactor();        LenovoComputer mLenovoComputer=computerFactory.createComputer(LenovoComputer.class);        mLenovoComputer.start();        HpComputer mHpComputer=computerFactory.createComputer(HpComputer.class);        mHpComputer.start();        AsusComputer mAsusComputerr=computerFactory.createComputer(AsusComputer.class);        mAsusComputerr.start();    }}

结构很简单,看看下面的UML图就更加容易理解了:

3.工厂方法与简单工厂

  简单工厂模式我们都知道,在工厂类中包含了必要的逻辑判断,根据不同的条件来动态实例化相关的类,对客户端来说,去除了与具体产品的依赖,与此同时也会带来一个问题:如果我们去增加产品,比如我们要生产苹果电脑,那我们就需要在工厂类中在添加一个Case分支条件,这违背了开放封闭原则,我们对修改也开放了。而工厂方法模式就没有违背这个开放封闭原则,如果我们需要生产苹果电脑,并不需要去修改工厂类,直接创建产品就好了

   之所以可以解决简单工厂的问题,是因为工厂方法模式把具体产品的创建推迟到工厂类的子类(具体工厂)中,此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式在添加新产品的时候就不修改工厂类逻辑而是添加新的工厂子类,符合开放封闭原则,克服了简单工厂模式中缺点

转载于:https://www.cnblogs.com/ganchuanpu/p/7921733.html

你可能感兴趣的文章
限制Textarea字数并实时显示输入字数统计
查看>>
RPC OVER HTTPS
查看>>
linux的top命令参数详解
查看>>
净空法师:人到这个世间来干什么?做人的意义究竟在哪里?
查看>>
洪泛和广播的区别
查看>>
思科IOS软件命名规则
查看>>
Windows Update的自动更新被关闭了,并且更改按钮是灰色无法更改设置
查看>>
Debian kali2 操作系统Segmentation fault
查看>>
oracle中Where子句顺序是否对SQL性能有影响
查看>>
开源邮件服务器
查看>>
# 180111php编译错误
查看>>
Char类型
查看>>
EIGRP 查看邻居命令详解
查看>>
我的友情链接
查看>>
OSX 10.11上,全局安装electron的问题
查看>>
SxsTrace使用教程(追踪软件运行的详细过程)
查看>>
mysql备份与恢复+ERROR 1046
查看>>
jenkins------部署项目到jboss eap下
查看>>
配置cacti邮件报警,postfix与sendmail冲突
查看>>
如何获取Windows XP完全内存转储文件
查看>>