设计模式之装饰模式
装饰模式
动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
考虑这样一个问题:
要求给一个类添加新的方法让其产生新的功能。
通常情况下,我们会为这个类创建一个子类,在子类中添加你需要的新方法。
但现在我们将上述的问题增加一个限定条件:为了不增加这个类的复杂度,如何动态的给这个类添加新的功能。
这就需要用到装饰模式了。
interface Person{
abstract void operation();
}
//待扩展对象
class ZhangSan implements Person{
@Override
public void operation() {
System.out.println("吃");
}
}
//待扩展对象
class LiSi implements Person{
@Override
public void operation() {
System.out.println("吃");
}
}
//创建一个抽象的装饰器让其继承待扩展对象
abstract class Decorator implements Person{
protected Person person;
public Decorator(Person person) {
this.person = person;
}
//重写operation(),实际上调用的还是父类的方法
public void operation() {
person.operation();
}
}
//创建装饰器的具体实现
class DecoratorImpl extends Decorator{
public DecoratorImpl(Person person) {
super(person);
}
//创建新的功能
public void operation() {
super.operation();
System.out.println("喝");
}
}
public class Client {
public static void main(String[] args) {
Person zhangsan = new ZhangSan();//待扩展对象
Person lisi = new LiSi();
DecoratorImpl d1 = new DecoratorImpl(zhangsan);//将待扩展对象传入装饰器
DecoratorImpl d2 = new DecoratorImpl(lisi);
d1.operation();
d2.operation();
}
}
装饰模式为类动态的添加更多的功能,它将扩展的功能放在单独的类中,这样可以简化原有的类,将原有类的核心职责和装饰功能区分开。

浙公网安备 33010602011771号