标签:设计模式
首先看装饰者模式的定义:动态的将责任附加到对象上。若要扩展功 能,装饰者提供了比继承更有弹性的替代方案!
先看看《大话设计模式》给出的类图:
实际上,装饰者模式就是:把装饰者对象当成“包装者”,换言之,把要装饰的对象作为参数传递到装饰对象里去,然后进行操作。(如果理解不对,希望给指正),下面看代码来理解这个类图:
这是装饰者和需要装饰的具体对象共同的接口:
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();
}
}
}
装饰者Apublic class ConcreateDecoratorA extends Decorator {
private String addState;
@Override
void Operation() {
super.Operation();
addState="New state";
System.out.println("ConcreateDecoratorA的操作");
}
}
装饰者Bpublic 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>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的操作
设计模式---装饰者模式(学习笔记),布布扣,bubuko.com
标签:设计模式
原文地址:http://blog.csdn.net/zouchengxufei/article/details/24096309