大话设计模式笔记(六)の工厂方法模式

栗子回顾

简单工厂模式:
https://www.cnblogs.com/call-me-devil/p/10926633.html

运算类使用工厂方法模式实现

UML图

代码实现

工厂接口

/**
 * 工厂接口
 * Created by callmeDevil on 2019/7/7.
 */
public interface IFactory {
    /**
     * 创建运算类
     *
     * @return
     */
    BaseOperation createOpertaion();
}

运算基础类

为节省篇章,详见简单工厂模式,此处省略。
以下加减乘除运算类(OperationAdd、OperationSub、OperationMul、OperationDiv)同。

加法工厂

/**
 * 加法工厂
 * Created by callmeDevil on 2019/7/7.
 */
public class AddFactory implements IFactory{

    @Override
    public BaseOperation createOpertaion() {
        return new OperationAdd();
    }

}

减法工厂

/**
 * 减法工厂
 * Created by callmeDevil on 2019/7/7.
 */
public class SubFactory implements IFactory {

    @Override
    public BaseOperation createOpertaion() {
        return new OperationSub();
    }

}

乘法工厂

/**
 * 乘法工厂
 * Created by callmeDevil on 2019/7/7.
 */
public class MulFactory implements IFactory{

    @Override
    public BaseOperation createOpertaion() {
        return new OperationMul();
    }

}

除法工厂

/**
 * 除法工厂
 * Created by callmeDevil on 2019/7/7.
 */
public class DivFactory implements IFactory{

    @Override
    public BaseOperation createOpertaion() {
        return new OperationDiv();
    }

}

测试

/**
 * 工厂方法模式测试
 * Created by callmeDevil on 2019/7/7.
 */
public class Test {

    public static void main(String[] args) {
        IFactory operFactory = new AddFactory();
        BaseOperation oper = operFactory.createOpertaion();
        oper.setNumA(1);
        oper.setNumB(2);
        double result = oper.getResult();
        System.out.println("加法测试结果:" + result);
    }

}

测试结果

加法测试结果:3.0

工厂方法模式

与简单工厂比较

简单工厂模式的最大优点在于工厂类中,包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

定义

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

结构图

总结

工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码进行。你想要加功能,本来是改工厂类的,而现在是修改客户端。

(0)

相关推荐

  • 大话设计模式笔记(十七)の迭代器模式

    迭代器模式 定义 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 什么时候用? 当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,你就应该考虑用迭代器模式. ...

  • 大话设计模式笔记(七)の原型模式

    举个栗子 问题描述 要求有一个简历类,必须要有姓名,可以设置性别和年龄,可以设置工作经历,最终需要三份简历. 简单实现 简历类 /** * 简历类 * Created by callmeDevil o ...

  • 大话设计模式笔记(二)の策略模式

    举个栗子 问题描述 商场收银软件,营业员根据客户所购买的商品单价和数量,向客户收费. 简单实现 /** * 普通实现 * Created by callmeDevil on 2019/6/1. */ ...

  • 大话设计模式笔记(十八)の单例模式

    单例模式 定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象.一个最好的办法就是,让类自身负责保存它的唯一实例.这 ...

  • 大话设计模式笔记(五)の代理模式

    举个栗子 故事是这样的... 一个小伙子喜欢上了隔壁班的一个妹子,但是又不认识,也害羞不好意思主动去说话,于是拜托了同样在这个班的一个朋友去传递自己想要送的礼物... 代码实现 该模式就不上什么简单实 ...

  • 大话设计模式笔记(一)の简单工厂模式

    概要 一个好的程序猿/媛敲出来的代码应该是可维护.可复用.可扩展的,也就是具有较好的灵活性. 为了达到以上目的,在还没敲代码之前,需要事先考虑通过何种方式能够使自己的程序的耦合度降低,最基本的便是面向 ...

  • 设计模式(1) 工厂方法模式

    创建型模式 简单工厂模式 工厂方法模式 IOC与工厂方法模式的结合 泛型工厂 委托工厂 创建型模式 创建型模式可以隔离客户程序对需要实例化类型的依赖关系,这类模式一般通过将实例化具体对象的职责委托给第 ...

  • 设计模式-工厂方法模式学习笔记

    工厂方法模式 定义 工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负 ...

  • PHP设计模式之工厂方法模式

    PHP设计模式之工厂方法模式 上回说到,简单工厂不属于GoF的二十三种设计模式,这回可就来真家伙了,大名顶顶的工厂方法模式前来报道! GoF类图解释 工厂方法模式对比简单工厂来说,最核心的一点,其实就 ...

  • [PHP小课堂]PHP设计模式之工厂方法模式

    [PHP小课堂]PHP设计模式之工厂方法模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • 【设计模式】工厂方法模式

    定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类 优缺点 优点 针对简单工厂不容易扩展,工厂方法将实例化延迟到子类工厂,从而提供扩展 缺点 每次新增产品 ...

  • 【设计模式】工厂方法模式(Factory Method)

    工厂方法模式(Factory Method) 工厂方法模式分为三种: 1.普通工厂模式 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.首先看下关系图:举例如下:(我们举一个发送邮件和短信 ...

  • 深入学习《大话设计模式》 简单工厂模式

    简单工厂模式 定义:封装改变,既然要封装改变,自然也就要找到需要更改的代码,然后将需要更改的代码用类来封装,这样的思路就是我们简单工厂模式的实现方式了 下面我们通过一则小故事来简述一下我们在项目中为什 ...