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

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

一、概述

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

核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

二、UML图示

三、编程实现

       该程序主要通过模拟代理追求女生的功能实现。

1、工厂接口

public interface IFactory {    Operation createOperation();}

2、工厂实现类

2.1 加法工厂

public class AddFactory implements IFactory {    @Override    public Operation createOperation() {        return new OperationAdd();    }}

2.2 减法工厂

public class SubFactory implements IFactory {    @Override    public Operation createOperation() {        return new OperationSub();    }}

2.3 乘法工厂

public class MultFactory implements IFactory {    @Override    public Operation createOperation() {        return new OperationMult();    }}

2.4 除法工厂

public class DivFactory implements IFactory{    @Override    public Operation createOperation() {        return new OperationDiv();    }}

3 功能操作类

public class Operation {    private int numberA;    private int numberB;    public int getNumberA() {        return numberA;    }    public void setNumberA(int numberA) {        this.numberA = numberA;    }    public int getNumberB() {        return numberB;    }    public void setNumberB(int numberB) {        this.numberB = numberB;    }    public int getResult(){        int result = 0;        return result;    }}

4 具体操作方法

4.1 加法操作

public class OperationAdd extends Operation {    @Override    public int getResult() {        int result = 0;        result = super.getNumberA() +super.getNumberB();        return result;    }}

4.2 减法操作

public class OperationSub extends Operation {    @Override    public int getResult() {        int result = 0;        result = super.getNumberA() - super.getNumberB();        return result;    }}

4.3 乘法操作

public class OperationMult extends Operation {    @Override    public int getResult() {        int result = 0;        result = super.getNumberA() * super.getNumberB();        return result;    }}

4.4 除法操作

public class OperationDiv extends Operation {    @Override    public int getResult() {        int result = 0;        try {            result = super.getNumberA() / super.getNumberB();        }catch (Exception e){            System.out.println("除数不能为0.");        }        return result;    }}

5、测试类

public class Test {    public static void main(String[] args) {        IFactory iFactory = new AddFactory();        Operation operation = iFactory.createOperation();        operation.setNumberA(10);        operation.setNumberB(5);        double result = operation.getResult();        System.out.println(result);    }}

4、工厂方法与简单工厂区别

   工厂方法模式把简单工厂的内部逻辑判断移到了客户端代码来进行。

   工厂方法模式是简单工厂模式的衍生,首先完全实现开放-封闭原则,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。

注:参考文献《大话设计模式》程杰著。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的文章
C++模板
查看>>
C++双冒号(::)的用法
查看>>
【Unity】封装SQLite管理类
查看>>
【Unity】面试题整理
查看>>
【C#】如何实现一个迭代器
查看>>
【Lua】Mac系统下配置SublimeText的Lua编译环境
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
【Unity】微信登录后将头像存为bytes,将bytes读取成sprite图片
查看>>
【Unity】使用GPS定位经纬度
查看>>
【UGUI/NGUI】一键换Text/Label字体
查看>>
【C#】身份证本地验证
查看>>
【Unity】坑爹的Bug
查看>>
【算法】求数组中某两个数的和为目标值
查看>>
如何高效学习动态规划?
查看>>
动态规划法(六)鸡蛋掉落问题(一)
查看>>
LeetCode 887.鸡蛋掉落(C++)
查看>>
奇异值分解(SVD)的原理详解及推导
查看>>
算法数据结构 思维导图学习系列(1)- 数据结构 8种数据结构 数组(Array)链表(Linked List)队列(Queue)栈(Stack)树(Tree)散列表(Hash)堆(Heap)图
查看>>
【机器学习】机器学习系统SysML 阅读表
查看>>
最小费用最大流 修改的dijkstra + Ford-Fulksonff算法
查看>>