您的位置:首页 > 其它

装饰模式

2016-05-30 17:03 211 查看
1、Component定义一个对象接口,给对象动态的增加职责

package com.hhdys.Decorator;

/**
* Created by zhangkai on 16/5/30.
*/
public abstract class Component {
public abstract void operation();
}

2、要装饰的对象

package com.hhdys.Decorator;

/**
* Created by zhangkai on 16/5/30.
*/
public class ConcreteComonent extends Component {
@Override
public void operation() {
System.out.println("具体对象的操作!!!");
}
}

3、装饰抽象类

package com.hhdys.Decorator;

/**
* Created by zhangkai on 16/5/30.
*/
public class Decorator extends Component {
protected Component component;

public Decorator(Component component) {
this.component = component;
}

@Override
public void operation() {
component.operation();
}
}

4、装饰A

package com.hhdys.Decorator;

/**
* Created by zhangkai on 16/5/30.
*/
public class ConcreteDecoratorA extends Decorator {
public ConcreteDecoratorA(Component component) {
super(component);
}

@Override
public void operation() {
super.operation();
System.out.println("增加装饰A!!!");
}
}

5、装饰B

package com.hhdys.Decorator;

/**
* Created by zhangkai on 16/5/30.
*/
public class ConccreteDecoratorB extends Decorator {
public ConccreteDecoratorB(Component component) {
super(component);
}

@Override
public void operation() {
super.operation();
operationB();
}

private void operationB(){
System.out.println("增加装饰B!!!");
}
}

6、运行结果:

具体对象的操作!!!
增加装饰A!!!
增加装饰B!!!

7、总结

7.1、装饰模式是为已有的功能动态地添加更多功能的一种方式。

优点:把类中的装饰功能从类中搬移出去,简化原有的类;有效的把类的核心职责和装饰功能区分开,去除相关类中的复杂装饰逻辑。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息