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

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

之前我们用简单工厂方法模式模拟了计算器的功能,现在用工厂方法模式实现以下

先构建一个工厂接口

public interface IFactory {    public IOperation create();}

然后加减乘除各个具体的工厂去实现这个接口

public class AddFactory implements IFactory{    public IOperation create() {        return new OperationAdd();    }}public class SubFactory implements IFactory{    public IOperation create() {        return new OperationSub();    }}public class MulFactory implements IFactory{    public IOperation create() {        return new OperationMul();    }}public class DivFactory implements IFactory{    public IOperation create() {        return new OperationDiv();    }}

相关的Operation类及接口已在简单工厂模式里面实现。

客户端(计算器)的实现:

public class Calculator {    public static void main(String[] args) {        IFactory factory = new AddFactory();        IOperation operation = factory.create();        String input1 = "3";        String input2 = "5";        Double d = operation.operate(input1, input2);        System.out.println(d.toString());    }}

是不是很简单!看起来和简单工厂模式区别也不大。简单工厂模式最大的优点在于工厂类中包含了必要的逻辑判断,根据客户端的条件选择动态实例化相关的类,对于客户端来说去除了与具体产品的依赖。但我们在新增一个算法时需要更改工厂类的 switch case分支。这不仅对扩展开放了,也对修改开放了,违背了开放-封闭原则。

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

我们发现,用工厂方法实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在,也就是说工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行,想要加功能,之前是要改工厂类,现在要改客户端,但符合了开放-封闭原则。

 

转载于:https://www.cnblogs.com/shicaiyou/p/9337971.html

你可能感兴趣的文章
Docker安装GitLab
查看>>
正向代理、反向代理、透明代理的区别
查看>>
git统计报告
查看>>
字符串朴素匹配 BF法
查看>>
django-模版学习
查看>>
https原理和使用Certbot配置https数字证书
查看>>
bzoj1295:[SCOI2009]最长距离
查看>>
Android实现浮层的上下滑动(支持内部加入View)
查看>>
ZOJ2326Tangled in Cables(最小生成树)
查看>>
排序之冒泡排序、插入排序及希尔排序
查看>>
C++网络编程之select
查看>>
设计模式复习【1】- 设计原则
查看>>
Win7+Ubuntu11.10(EasyBCD硬盘安装)
查看>>
算法笔记_018:旅行商问题(Java)
查看>>
django学习——xadmin中集成富文本编辑器ueditor
查看>>
聚类分析初探(一)引言
查看>>
理解绝对定位和相对定位布局
查看>>
macosx安装之旅(5)-网卡驱动安装
查看>>
【模拟】HDU 5752 Sqrt Bo
查看>>
hdu2046骨牌铺方格
查看>>