设计模式
来源:互联网 发布:网络性能测试包括什么 编辑:程序博客网 时间:2024/06/05 01:13
定义:装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。View CodeView CodeView CodeView CodeView CodeView Code
对象:
抽象组件:定义一个抽象类或接口,来规范准备附加功能的类;
具体组件:将要被附加功能的类,实现抽象构件角色抽象类或接口;
抽象装饰者:持有对具体构件角色的引用并定义与抽象构件角色一致的接口;
具体装饰:实现抽象装饰者角色,负责对具体构件添加额外功能。
代码示例:
场景为一个肉夹馍为5元,动态的为它添加佐料来改变价格。
抽象组件:
package com.decorator;public interface CalculatePrice { float calcute();}
具体组件:
package com.decorator;public class RouJiaMePrice implements CalculatePrice { @Override public float calcute() { return 5.0F; }}
抽象装饰者:
package com.decorator;public abstract class Decorator implements CalculatePrice {}
具体装饰:
package com.decorator;public class LiJi extends Decorator { private CalculatePrice calculatePrice; public LiJi(CalculatePrice calculatePrice) { super(); this.calculatePrice = calculatePrice; } @Override public float calcute() { return calculatePrice.calcute() + liJiPrice(); } private float liJiPrice(){ return 1.0F; }}
package com.decorator;public class PeiGen extends Decorator { private CalculatePrice calculatePrice; public PeiGen(CalculatePrice calculatePrice) { super(); this.calculatePrice = calculatePrice; } @Override public float calcute() { return calculatePrice.calcute() + peiGenPrice(); } private float peiGenPrice(){ return 1.0F; }}
测试代码:
package com.decorator;public class TestDecorator { public static void main(String[] args) { CalculatePrice rouJiaMePrice = new RouJiaMePrice(); System.out.println("原始价格:" + rouJiaMePrice.calcute() + "元"); CalculatePrice liJi = new LiJi(rouJiaMePrice); System.out.println("原始价格 加里脊:" + liJi.calcute() + "元"); CalculatePrice peiGen = new PeiGen(rouJiaMePrice); System.out.println("原始价格 加培根:" + peiGen.calcute() + "元"); CalculatePrice price = new PeiGen(new LiJi(rouJiaMePrice)); System.out.println("原始价格 加里脊和培根:" + price.calcute() + "元"); }}
总结:
1、装饰者和被装饰者有相同的超类型;
2、装饰者保存了一个被装饰者的引用;
3、可以动态添加新功能,而不须修改现有的代码;
4、JDK库中的I/O中就使用了装饰者模式进行文件的读取;
阅读全文
0 0
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式~~~~~~~~~~
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 关于云计算领域,你需要了解的52个术语
- 设计模式
- 第三章 DispatcherServlet详解 ——跟开涛学SpringMVC
- [LeetCode] Lowest Common Ancestor of a Binary Tree 二叉树的最小共同父节点
- 设计模式
- 设计模式
- ArrayList源码浅析(jdk1.8)
- LinkedList源码浅析(jdk1.8)
- nodejs常用命令
- JSP简介
- HashMap源码浅析(jdk1.8)
- 大数据多路并归算法
- 设计模式
- EasyNVR H5直播流媒体解决方案前端构建之:如何播放自动适配RTMP/HLS直播播放