设计模式研究

装饰者模式

2020-07-23  本文已影响0人  Stephenwish

装饰者本质是JAVA继承的一种变种,可以理解为加强的extends


第一步,写个抽象类和继承类
public abstract class MySource {
    abstract void operate();
}

public class MySourceImpl extends  MySource{
    @Override
    void operate() {
        System.err.println("我是具体实现类");
    }
}
第二步,再来一个继承类,不过是没有实现的,里面要放最开始抽象父类这个属性,通过构造注入留个后门装载上面正真的实现类
public abstract class MyOtherSource extends  MySource{
    private MySource mySource=null;

    public MyOtherSource(MySource mySource) {
        this.mySource = mySource;
    }

    @Override
    void operate() {
        mySource.operate();
    }

    //新增几个原始父类没有的方法,再具体的子类实现它
    abstract void stop();
}
第三步,实现上面步骤的实例
public class XOtherSourceImpl extends  MyOtherSource{

    public XOtherSourceImpl(MySource mySource) {
        super(mySource);
    }

    @Override
    void stop() {
        System.err.println("X实现方法");
    }
}

public class YOtherSourceImpl extends MyOtherSource{
    public YOtherSourceImpl(MySource mySource) {
        super(mySource);
    }

    @Override
    void stop() {
        System.err.println("Y实现方法");
    }
}
场景实用类检测
public class Client {
    public static void main(String[] args) {
        MySource mySource = new MySourceImpl();
        MyOtherSource otherSource = new XOtherSourceImpl(mySource);
        otherSource.stop();//相当于在MySourceImpl 里面加了stop 扩展一样
        otherSource.operate();
    }
}
上一篇下一篇

猜你喜欢

热点阅读