Java抽象工厂模式之理解
2018-03-12 21:19
253 查看
抽象工厂模式
思考
在理解为什么使用这个模式之前,我们考虑这样一个场景:有两种设备:鼠标(Mouse)和键盘(Keyboard)。
有两种品牌的鼠标和键盘,罗技鼠标,罗技键盘,雷蛇鼠标,雷蛇键盘。
有一个生产外设的工厂接口(PeripheralFactory)专门用来生产鼠标和键盘。
有两个商家都生产外设,罗技和雷蛇,他们都有自己的生产工厂分别是。(LogitechPeripheralFactory)、(RazerPeripheralFactory),他们都实现外设工厂接口。
当我们需要一个鼠标或者键盘的时候,我们都可以通过对应的工厂来生产不同品牌的鼠标或者键盘。
类图
代码:
键盘
//键盘 public interface KeyBoard { public String click(); } //具体键盘 罗技键盘 public class LogitechKeyBoard implements KeyBoard{ @Override public String click() { // TODO Auto-generated method stub return "罗技键盘按下"; } } //具体键盘 雷蛇键盘 public class RazerKeyBoard implements KeyBoard { @Override public String click() { // TODO Auto-generated method stub return "雷蛇键盘按下"; } }
鼠标
//鼠标 public interface Mouse { public String move(); } //具体鼠标 罗技鼠标 public class LogitechMouse implements Mouse{ @Override public String move() { // TODO Auto-generated method stub return "罗技鼠标移动"; } } //具体鼠标 雷蛇鼠标 public class RazerMouse implements Mouse{ @Override public String move() { // TODO Auto-generated method stub return "雷蛇鼠标移动"; } }
工厂
//工厂,提供生产鼠标和键盘的功能 public interface PeripheralFactory { Mouse createMouse(); KeyBoard createKeyBoard(); } //罗技工厂,生产罗技品牌的鼠标和键盘 public class LogitechPeripheralFactory implements PeripheralFactory { @Override public Mouse createMouse() { // TODO Auto-generated method stub return new LogitechMouse(); } @Override public KeyBoard createKeyBoard() { // TODO Auto-generated method stub return new LogitechKeyBoard(); } } //雷蛇工厂,生产雷蛇品牌的鼠标和键盘 public class RazerPeripheralFactory implements PeripheralFactory { @Override public Mouse createMouse() { // TODO Auto-generated method stub return new RazerMouse(); } @Override public KeyBoard createKeyBoard() { // TODO Auto-generated method stub return new RazerKeyBoard(); } }
测试
public class Test { public static void main(String[] args) { PeripheralFactory lFactory = new LogitechPeripheralFactory(); PeripheralFactory rFactory = new RazerPeripheralFactory(); Mouse lMouse = lFactory.createMouse(); KeyBoard lKeyBoard = lFactory.createKeyBoard(); Mouse rMouse = rFactory.createMouse(); KeyBoard rKeyBoard = rFactory.createKeyBoard(); System.out.println(lMouse.move()); System.out.println(lKeyBoard.click()); System.out.println(rMouse.move()); System.out.println(rKeyBoard.click()); } }
结果
罗技鼠标移动罗技键盘按下
雷蛇鼠标移动
雷蛇键盘按下
总结
我们通过创建两种不同的工厂,生产出了属于不同类型的鼠标和键盘,这里面,鼠标和键盘被成为产品族,产品族就是一个工厂所能生产的所有产品,产品族可被多种工厂生产出来。假如我们现在又出现了一个品牌S,这个品牌也是生产这个产品族的,那么我们就可以创建一个新的工厂来生成,保证了原有代码的不变就可以添加新的功能。相关文章推荐
- 通过抽象工厂模式再理解java的上转型
- 一个经典例子让你彻彻底底理解java回调机制
- 深入理解Java G1垃圾收集器
- java中的tiis关键字理解
- Java中的final理解
- 深入理解java中的流
- 深入理解Java虚拟机笔记---原子性、可见性、有序性
- Java基础课——interface的理解
- java设计模式 (1) 工厂模式,抽象工厂模式,单子模式
- 我对Java Serializable(序列化)的理解和总结
- Jugiven-To-JAVA-01:toUpperCase(locale)的理解
- 对java synchronized方法的深入理解
- Java动态代理的理解
- Java---堆栈的理解
- [转帖]JAVA中几个易混淆关键词的正确理解
- Java线程同步机制synchronized关键字的理解
- 深入理解Java之《突破程序员基本功》之面向对象 ---------读书笔记------持续更新
- Java线程中断的本质深入理解
- 关于java主函数的理解
- 我理解的--java组合模式