Java描述设计模式(09):装饰模式
本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景1、场景描述
2、场景图解3、代码实现public class C01_InScene { public static void main(String[] args) { TheGreatestSage greatestSage = new Monkey(); TheGreatestSage fish = new Fish(greatestSage); fish.shapeDesc(); // 这里虽然是鱼形态,但是本体是悟空,所以可以直接变化 TheGreatestSage bird = new Bird(fish); bird.shapeDesc(); } } // 顶级接口 interface TheGreatestSage { // 定义一个描述形态的方法 void shapeDesc (); } // 悟空本尊 class Monkey implements TheGreatestSage{ @Override public void shapeDesc() { System.out.println("Monkey.move()"); } } // 包装一层变化的描述 class Change implements TheGreatestSage { private TheGreatestSage greatestSage; Change(TheGreatestSage greatestSage){ this.greatestSage = greatestSage; } @Override public void shapeDesc() { greatestSage.shapeDesc(); } } // 具体的变化形态 class Fish extends Change{ public Fish(TheGreatestSage greatestSage) { super(greatestSage); } public void shapeDesc(){ System.out.println("鱼在水中游..."); } } class Bird extends Change{ public Bird(TheGreatestSage greatestSage) { super(greatestSage); } public void shapeDesc(){ System.out.println("鸟在空中飞..."); } } 二、装饰模式1、基础概念
2、核心角色
3、模式图解4、源代码实现// 抽象构件角色 interface Component { void sampleOperation(); } // 具体构件角色 class ConcreteComponent implements Component{ @Override public void sampleOperation() { System.out.println("业务相关代码"); } } //装饰角色 class Decorator implements Component{ private Component component; public Decorator(Component component){ this.component = component; } @Override public void sampleOperation() { //委派给构件进行处理 component.sampleOperation(); } } // 具体装饰角色 class ConcreteDecoratorA extends Decorator{ public ConcreteDecoratorA(Component component) { super(component); } @Override public void sampleOperation() { super.sampleOperation(); System.out.println("A.处理相关业务的代码"); } } class ConcreteDecoratorB extends Decorator{ public ConcreteDecoratorB(Component component) { super(component); } @Override public void sampleOperation() { super.sampleOperation(); System.out.println("B.处理相关业务方法"); } } 5、该模式简化
6、半透明说明
三、实际应用1、JDK中IO流1)、基本描述
2)、IO流图解描述
四、优缺点总结1、模式的优点
2、模式的优点
五、源代码地址GitHub地址:知了一笑 https://github.com/cicadasmile/model-arithmetic-parent 码云地址:知了一笑 https://gitee.com/cicadasmile/model-arithmetic-parent (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- SSM框架之整合EhCache
- SwipeRefreshLayout 官方的下拉刷新组件使用示例
- haskell – “forkIO”和“putMVar”:引擎盖下发生了什么?
- java – Ant覆盖自定义清单文件
- java – /google-play-services_lib/AndroidManifest.xml的
- jsf – 无法将PrimeFaces添加为EAR的库
- websphere – 在哪里可以找到IBM JDK / JRE for Windows的特
- The Class Loader Hierarchy--转载
- java – Restlet客户端重复调用Restlet服务器挂起
- 如何在java中设置过期日期