装饰模式(设计模式_06)

装饰模式,可以动态给对象增加一些额外的职责,比子类更加灵活,通常使用继承来实现扩展性,继承的子类越来越多,会增加复杂性,装饰模式的特点是:装饰者与被装饰者拥有共同的超类,继承的目的是继承类型。

以下用一个案例来实现装饰模式:

// 定义装饰接口
public interface IDecoration {

    // 定义显示show装饰的方法
    public void show();

}

// 定义装饰者
public abstract class Decoration implements IDecoration {

    private IDecoration iDecoration;

    public Decoration(IDecoration iDecoration) {
        this.iDecoration = iDecoration;
    }

    public void show() {
        iDecoration.show();
    }

}

// 定义第一个被装饰者,装饰者会很多很多
public class DecorationA extends Decoration{

    public DecorationA(IDecoration iDecoration) {
        super(iDecoration);
        // TODO Auto-generated constructor stub
    }

    public void show() {
        super.show();
        System.out.println("DecorationA show()...");
    }
}

// 定义第二个被装饰者
public class DecorationB extends Decoration{

    public DecorationB(IDecoration iDecoration) {
        super(iDecoration);
        // TODO Auto-generated constructor stub
    }

    public void show() {
        super.show();
        System.out.println("DecorationB show()...");
    }

}

// 定义一个人,直接实现 被装饰者的 共同超类
public class Person implements IDecoration{

    public void show() {
        System.out.println("Person show()...");
    }

}

// 客户端程序
public class Main {

    public static void main(String [] args) {


        // 会发现这里的写法,和IO有很相似
        Decoration decoration = new DecorationA(
                                                new DecorationB(
                                                                new Person() 
                                                                            ));

        decoration.show();

    }

}

运行结果:
这里写图片描述

装饰模式的好处:有装饰者与被装饰者有共同的超类

谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,
刘德利CSDN博客, http://blog.csdn.net/u011967006

原文地址:https://www.cnblogs.com/android-deli/p/10322229.html