Android 内功心法(1.9)——java设计模式之装饰模式
来源:互联网 发布:怎样获得淘宝优惠券 编辑:程序博客网 时间:2024/05/17 04:26
基本概念:
动态的给一个添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。
先看代码:
/** *装饰抽象类 * 定义一个对象接口,可以给其中的对象动态的添加职责。 * */public abstract class Component { public HashMap zhuangshi=new HashMap(); /** * 该接口用于子类重写该方法,实现动态添加职责的目的 */ public abstract HashMap operation();}
/** * 该类定义了一个具体的对象,所有装饰类都可以给它添加装饰 * 它无需知道装饰类的存在 * 它本身就可以给对象添加一些装饰 */public class ConcreteComponent extends Component { @Override public HashMap operation() { Log.e("test","具体的对象操作"); zhuangshi.put("hat","棒球帽"); return zhuangshi; }}
/** * 装饰抽象类,继承了component,从外类来扩展Component类的功能, * 但对于component来说,是无需知道Decorator的存在的 * 至于ConcreteDecorator就是具体的装饰对象,起到给Component添加职责的功能 */public abstract class Decorator extends Component { protected Component component; /**设置component * @param component */ public void setComponent(Component component) { this.component = component; } /** * 重写component,实际执行的是component的operation()方法 */ @Override public HashMap operation() { if (component != null) { return component.operation(); } return null; }
/** * 具体的装饰类 */public class ConcreteDecoratorA extends Decorator { private String addedState; @Override public HashMap operation() { /**首先运行原来Component中的方法在执行本类中的方法,相当于对原来的方法进行了装饰*/ super.operation(); addedState = "羽绒服"; Log.e("test", "具体的装饰对象a的操作"); zhuangshi.put("yifu",addedState); return zhuangshi; }}
/** * 具体的装饰类B */public class ConcreteDecoratorB extends Decorator { @Override public HashMap operation() { /**首先运行原来Component中的方法在执行本类中的方法,相当于对原来的方法进行了装饰*/ super.operation(); Log.e("test", "具体的装饰对象b的操作"); addedBehavior(); return zhuangshi; } /** * 本类中独有的方法,区别于a类 */ private void addedBehavior(){ zhuangshi.put("kuzi","牛仔裤"); }}
/** * 测试 */public class ConcreteTest { private HashMap zhuangshi; public void getTest(){ ConcreteComponent cc=new ConcreteComponent();//第一个功能,添加帽子;它是具体对象 ConcreteDecoratorA cd1=new ConcreteDecoratorA();//第二个类,添加衣服,它是装饰 ConcreteDecoratorB cd2=new ConcreteDecoratorB();//第三个类,添加裤子,它是装饰 cd1.setComponent(cc); cd2.setComponent(cd1); zhuangshi=cd2.operation();//通过装饰模式,依次的实现各自类中的功能,得到一个完整的装饰过程和结果 }}
装饰模式是利用不断的往对象里setComponent来进行对象的包装的。
这样做的好处就是如何装饰对象和使用这个对象给分离开了。
每个装饰类都只关心自己如何装饰具体对象。不需要关心如何被添加到装饰链中。
总结:
装饰模式的目的就是为了给已有对象动态的添加更多的功能。一个类只需要有自己的核心职责,其他的全部可以用装饰模式动态的添加上去。
使用场景:
当系统需要更新功能的时候,旧的类中添加新的代码,新代码就需要给原有数据添加新字段,新逻辑。通过装饰模式添加新功能保证原有字段和逻辑的情况下添加了新字段和心逻辑。
0 0
- Android 内功心法(1.9)——java设计模式之装饰模式
- Android 内功心法(1.1)——android常用设计模式之单例模式
- Android 内功心法(1.2)——android常用设计模式之工厂模式
- Android 内功心法(1.3)——android常用设计模式之观察者模式
- Android 内功心法(1.4)——android常用设计模式之代理模式
- Android 内功心法(1.5)——android常用设计模式之命令模式
- Android 内功心法(1.6)——android常用设计模式之适配器模式
- Android 内功心法(1.7)——android常用设计模式之组合(合成)模式
- Android 内功心法(1.8)——android常用设计模式之访问者模式
- Android 内功心法(1.10)——android常用设计模式之建造者(Builder)模式
- Android 内功心法(1.2.1)——android常用设计模式之工厂模式后续抽象工厂模式
- Android 内功心法(1)——设计模式的原则和android中常用的模式
- 设计模式—面向对象程序员的内功心法
- Android 内功心法(番外)——写在设计模式前,面对对象编程基础
- Java设计模式之——装饰设计模式
- 设计模式--面向对象程序员的内功心法
- java设计模式之——装饰模式
- Java设计模式透析之 ——装饰模式(Decorator )
- log4j资料
- 11-散列1 电话聊天狂人
- matlab图片清晰度调整
- POI 插入行
- MFRC522模块开发笔记
- Android 内功心法(1.9)——java设计模式之装饰模式
- 优化大师每天定点自动优化脚本
- spring依赖注入
- leetcode increasing-triplet-subsequence
- JAVA前端与后端参数传递方法小结
- ViewPage + Fragment 实现订单管理的效果
- 第二章 单机存储系统
- php CURL 发送请求详解
- 词法分析器