设计模式---装饰者模式(学习笔记)
来源:互联网 发布:linux dhcp client 编辑:程序博客网 时间:2024/05/01 16:07
首先看装饰者模式的定义:动态的将责任附加到对象上。若要扩展功 能,装饰者提供了比继承更有弹性的替代方案!
先看看《大话设计模式》给出的类图:
实际上,装饰者模式就是:把装饰者对象当成“包装者”,换言之,把要装饰的对象作为参数传递到装饰对象里去,然后进行操作。(如果理解不对,希望给指正),下面看代码来理解这个类图:
这是装饰者和需要装饰的具体对象共同的接口:
public abstract class Component { abstract void Operation();}具体对象
public class ConcreteComponment extends Component { @Override void Operation() { System.out.println("具体对象的操作"); }}装饰着基类
public class Decorator extends Component { private Component component; public void setComponent(Component component) { this.component = component; } @Override void Operation() { if (component!=null){ component.Operation(); } }}装饰者A
public class ConcreateDecoratorA extends Decorator { private String addState; @Override void Operation() { super.Operation(); addState="New state"; System.out.println("ConcreateDecoratorA的操作"); }}装饰者B
public class ConcreateDecoratorB extends Decorator { @Override void Operation() { AddedBehavior(); super.Operation();/**<pre name="code" class="java"><p><span style="font-size:14px;"><em></em></span></p><span style="font-size:14px;"><em>装饰者可以在所委托被装饰者的行为之前与 / 或之后,加上自己的行为,以达到特定的目的。</em></span>
**/ System.out.println("ConcreateDecoratorB的操作"); } public void AddedBehavior(){ System.out.println("AddedBehavior"); }}测试类:
public class Main { public static void main(String[] args){ConcreteComponment con=new ConcreteComponment(); ConcreateDecoratorA a=new ConcreateDecoratorA(); a.setComponent(con); a.Operation(); ConcreateDecoratorB b=new ConcreateDecoratorB(); b.setComponent(con); b.Operation(); }}
测试结果:
具体对象的操作ConcreateDecoratorA的操作AddedBehavior具体对象的操作ConcreateDecoratorB的操作
0 0
- 设计模式-装饰者模式学习笔记
- 设计模式学习笔记十(Decorator装饰者模式)
- 【设计模式】学习笔记3:装饰者模式(Decorator )
- 设计模式---装饰者模式(学习笔记)
- 设计模式学习笔记(三)- -装饰者模式
- 装饰(包装)设计模式学习笔记
- 设计模式学习笔记-装饰模式
- 设计模式学习笔记--装饰(Decorator)模式
- 设计模式--装饰模式学习笔记
- 设计模式学习笔记--装饰模式
- [设计模式学习笔记]DECORATOR装饰模式
- 设计模式学习笔记-装饰模式
- 设计模式学习笔记之装饰模式
- 设计模式学习笔记--装饰器模式
- C++设计模式学习笔记二:装饰者模式
- 设计模式学习笔记之装饰者模式
- 《HeadFirst设计模式》学习笔记2-装饰者模式
- 设计模式学习笔记--装饰者模式(Decorator Pattern)
- TestFlight——完美的iOS App测试方案
- PMP-产品范围与项目范围区别
- C#中子线程操作主线程中窗体上控件的方法
- 语录
- winform操作系统,登录后怎么关闭登录界面。
- 设计模式---装饰者模式(学习笔记)
- C/C++字符串查找函数
- win7下重装mysql
- Fibonacci - POJ 3070 矩阵乘法快速幂
- Installing bitcoin in ubuntu
- 关于android初学的小知识强化
- PMP考试--三点估计法
- 博弈论
- D2014_4_19