Decorator (装饰模式)(デコレータ・パターン)

装饰模式详解
本文介绍了一种设计模式——装饰模式,该模式允许以透明的方式扩展一个对象的功能而不改变其结构。适用于需要动态添加职责到对象或者组合基本功能形成复合功能的场景。
【描述】
透明的方式对客户端的功能进行扩展,是继承关系的一个替代方案。
与集成关系的区别:继承关系是一个树状结构,各种扩展成为父子关系,无法同时实现两个兄弟功能。装饰模式可以随便组合
与封装的区别:装饰模式是以透明的方式进行扩展,就是说原来的功能不发生变化。
经典使用:
BufferedReader br = new BufferedReader(new FileReader("readme.txt")); 


【使用场合】
1. 需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
比如游戏中某些魔法功能。魔法有效的时候,人物就有某种超能,失效后回复常态。
2. 需要增加由一些基本功能的排列组合而产生的复合功能。


【实现步骤】
1.从同一父类扩展两个字类,装饰者和被装饰者。
2.使用被装饰者对装饰类实例化。(注意:修饰类不能直接实例化)


public interface Component {
public void operation();
}

public class ConcreteComponent implements Component {
public void operation() {
// TODO 自動生成されたメソッド・スタブ
System.out.println("do something");
}

}

public class Decorator implements Component {
private Component component;

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

//对现有功能扩展
public void operation() {
//do something before
System.out.println("before");
component.operation();
System.out.println("after");
//do something after
}

//增加新功能
public void newOperation() {
System.out.println("new operation");
//component.operation();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值