您的位置:首页 > 其它

设计模式总结之装饰者模式

2016-05-10 21:06 405 查看
装饰者模式,角色主要由装饰者和被装饰者组成。装饰者模式的设计原则就是多用组合少用继承合开闭原则。其动态的将职责添加到对象身上,如果需要扩展,则提供了比继承更加灵活的实现方式。装饰者有如下特点:1.装饰者和被装饰者有相同父类。2.可以用一个或多个装饰者装饰被装饰者。3.被装饰者可以在自己行为之前或之后添加装饰者的行为。4.对象可以在任何时候被装饰,且动态装饰。5.装饰模式使用的继承不是为了拓展,而是为了与更好的匹配类型。
Java中我们常见的Io类也是用的装饰者模式。
装饰者模式的类图如下:


可以举一个例子,比如一个游戏开发程序员,目前只会开发游戏,以后要给他拓展一些技能,就可以选择装饰者模式。package com.java.decorator;

public interface Component {
void doOperation();
}
package com.java.decorator;

public class Decorator implements Component{
private Component component;

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

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

}
package com.java.decorator;

public class ConcreteCompontent implements Component{

@Override
public void doOperation() {
System.out.println("我是被装饰者,我会做游戏");
}

}
package com.java.decorator;

public class BackGroundDecorator extends Decorator{

public BackGroundDecorator(Component component) {
super(component);
}
@Override
public void doOperation() {
super.doOperation();
System.out.println("可以给你添加后台技能哦");
}

}
package com.java.decorator;

public class OperationDecorator extends Decorator{

public OperationDecorator(Component component) {
super(component);
}
@Override
public void doOperation() {
super.doOperation();
System.out.println("可以给你添加运营技能");
}
}

package com.java.decorator;

public class Test {
public static void main(String[] args) {
Object object = new Object();
Object b = object;
System.out.println(object.hashCode());
System.out.println(b.hashCode());

ConcreteCompontent compontent = new  ConcreteCompontent();
BackGroundDecorator backGroundDecorator = new BackGroundDecorator(compontent);
backGroundDecorator.doOperation();
OperationDecorator decorator = new OperationDecorator(backGroundDecorator);
decorator.doOperation();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: