Java设计模式 之 装饰者模式
来源:互联网 发布:insar数据处理软件 编辑:程序博客网 时间:2024/06/03 16:04
Java设计模式 之 装饰者模式
假设现在有个需求是 统计组装手机花费的时间,组件有电路板,CPU及屏幕这三个,首先我们为三个设计个抽象类,代码如下:
public abstract class Machine { // 花费的时间 abstract int spendTime(); }
电路板:
public class Board extends Machine { @Override int spendTime() { return 60; }}
A11的处理器:
public class A11CPU extends Machine{ @Override public int spendTime() { return 20; }}
OLED屏幕:
public class OLEDScreen extends Machine { @Override int spendTime() { return 120; }}
基本组件已经ok,我们可以开始组装他们,一般来说我们比较简单的做法,会把他们相加,代码如下:
public class PhoneFactory { public static void main(String[] args) { Machine board = new Board(); Machine a11CPU = new A11CPU(); Machine oledScreen = new OLEDScreen(); // 结果为200 int spendTime = board.spendTime() + a11CPU.spendTime() + oledScreen.spendTime(); }}
我们细细看上班的代码,实现需求是没有问题的,
但假设我们现在需要使用 不同组件 比如 骁龙处理器 或者 Led屏幕 或者 添加其他组装组件 比如扬声器 的时候时我们上述代码扩展就很麻烦,就需要重新修改加一遍,这显然很麻烦。
装饰者模式实现
有没对应的模式可以帮我们解决下?
这时候我们可以试下 装饰者模式,我们可以看到 cpu及屏幕 是装在电路板上的,我们是否可以电路板为基本对象,把 cpu 和 屏幕装 饰到电路板上面,代码如下:
public class A11CPU extends Machine{ private Machine machine; public A11CPU(Machine machine) { this.machine = machine; } @Override public int spendTime() { // 装饰本地对象 // 把时间相加 return 20 + machine.spendTime(); }}
public class OLEDScreen extends Machine { private Machine machine; public OLEDScreen(Machine machine) { this.machine = machine; } @Override int spendTime() { // 装饰本地对象 // 把时间相加 return 120 + machine.spendTime(); }}
public class PhoneFactory { public static void main(String[] args) { Machine machine = new Board(); machine = new A11CPU(machine); machine = new OLEDScreen(machine); // 结果为200 int spendTime = machine.spendTime(); }}
假设电路板可以容纳所以组件,把 A11处理器 换成 骁龙处理器 和 OLED 换成 LED屏 也可以较少修改代码。
我们最后来看装饰者模式的定义
装饰者模式:动态将责任附加在对象上,若要扩展功能, 装饰者提供比继承更有弹性的替代方案。
可看到我们 动态把责任寄托在 Machine machine 一个对象上,通过添加对象修饰 machine,比如在对象的内部实现相加的方法从而来丰富对象。
源码可参看IO系列的源码,主要是以装饰者模式实现。
其他模式可点击链接进目录阅读了解:http://blog.csdn.net/xiao_wanzi94/article/details/78118092
阅读全文
0 0
- java设计模式之装饰者模式
- Java设计模式之装饰者模式
- java设计模式之装饰者模式
- Java设计模式之装饰者模式
- Java设计模式之装饰者模式
- Java设计模式之装饰者模式
- java设计模式之装饰者模式
- Java设计模式之装饰者模式
- Java设计模式之装饰者模式
- java设计模式之装饰者模式
- java设计模式之------装饰者模式
- Java设计模式之装饰者模式
- java设计模式之装饰者模式
- Java 设计模式之 -- 装饰者模式
- java设计模式之装饰者模式
- Java设计模式之---装饰者模式
- java设计模式之装饰者模式
- java设计模式之装饰者模式
- UE4透明粒子距离场碰撞随机分布解决方案
- struts2的token 使用
- centos7报错: configure: error: Cannot find curses.h header file
- 收集的正则
- 洛谷 P1210 回文检测
- Java设计模式 之 装饰者模式
- 链栈
- AM2 开发日志2 10.17
- struts2 的 result 的 type
- 国外公司技术博客盘点
- java 获取 MSN用户列表
- 看有心课堂笔记一
- java 方法
- 获取字符串中的中文字符长度