设计模式入门:工厂方法模式
时间:2022-06-11
本文章向大家介绍设计模式入门:工厂方法模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
UML类图
工厂方法模式
代码示例
- 定义运算枚举
/**
* 运算枚举
*/
public enum TypeEnum {
/**
* 加
*/
ADD,
/**
* 减
*/
SUB,;
}
- 定义抽象产品类,包含一个抽象方法
/**
* 抽象产品(计算器)
*/
public interface ICalculator {
/**
* 计算numberA和numberB并返回操作结果
*
* @param numberA
* @param numberB
* @return 操作结果
*/
int compute(int numberA, int numberB);
}
- 产品A,继承了抽象产品类并实现其定义的方法
/**
* 具有加法运算功能的计算器
*/
public class CalculatorAdd implements ICalculator {
/**
* 将两个数进行加法运算
*
* @param numberA
* @param numberB
* @return 相加结果
*/
@Override
public int compute(int numberA, int numberB) {
return numberA + numberB;
}
}
- 产品B,继承了抽象产品类并实现其定义的方法
/**
* 具有减法运算功能的计算器
*/
public class CalculatorSub implements ICalculator {
/**
* 将两个数进行减法运算
*
* @param numberA
* @param numberB
* @return 相减结果
*/
@Override
public int compute(int numberA, int numberB) {
return numberA - numberB;
}
}
- 抽象工厂,用于获取相应的产品
public interface ICalculatorFactory {
/**
* 获取生产某一功能的计算器工厂实例
*
* @return 返回生产某一功能计算器的工厂实例
*/
ICalculator productCalculator();
}
- 具体工厂A,实现了获取相关产品的功能
public class CalculatorAddFactory implements ICalculatorFactory {
/**
* 获取具有加法运算功能的计算器实例
*
* @return 返回当前实例
*/
@Override
public ICalculator productCalculator() {
return new CalculatorAdd();
}
}
- 具体工厂B,实现了获取相关产品的功能
public class CalculatorSubFactory implements ICalculatorFactory {
/**
* 获取具有减法运算功能的计算器实例
*
* @return 返回当前实例
*/
@Override
public ICalculator productCalculator() {
return new CalculatorSub();
}
}
- 客户端测试
public class CalculatorMain {
public static void main(String[] args) {
int numberA = 23;
int numberB = 18;
// 从抽象工厂获取生产某一功能计算器的工厂实例
ICalculatorFactory calculatorFactory = new CalculatorSubFactory();
// 从当前工厂获取制造某一功能的计算器实例
ICalculator calculator = calculatorFactory.productCalculator();
int result = calculator.compute(numberA, numberB);
System.out.println("result = " + result);
}
}
总结思考
工厂方法同样也是一种创建型模式,是简单工厂模式的进一步抽象和推广。根据开闭原则,在工厂方法模式中新增功能,需要添加相应的功能类和工厂类(对扩展开放,对修改关闭),而具体的实例化则延迟到了工厂子类,并由客户端决定实例化哪一个工厂类。
对比简单工厂,工厂方法把简单工厂内部的逻辑判断移动到了客户端,当添加功能时,原本是要改工厂类的,而现在是修改客户端。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法