装饰模式-撤销装饰

来源:互联网 发布:淘宝杂货铺好做吗 编辑:程序博客网 时间:2024/04/27 22:55

接Java 装饰模式(4.4)

装饰模式可以灵活地为基本对象添加功能,也可以撤销功能装饰。

假设需要撤销TSong装饰,则在IProfession中添加public abstract IProfession removeSongTalent();

IProfession的子类型给出实现:

Teacher:    @Override  public IProfession removeSongTalent() {     return this;    }TEnglish:    @Override public IProfession removeSongTalent() {        return new TEnglish(base.removeSongTalent());}TSong:    @Override  public IProfession removeSongTalent() {        return base.removeSongTalent();    }

测试代码

        IProfession p = (IProfession) God.create("Profession-decorator");//
        p.say("类层次");
        p = new TSong(
                new TSong(
                        new TEnglish(
                                new TSong(
                                        new TEnglish(p)))));
        p.say("LSP");
        p = p.removeSongTalent();
        p.say("继承");

输出:

讲解[类层次]
讲解[E文(旋律(E文(旋律(旋律(LSP)))))]
讲解[E文(E文(继承))]


原创粉丝点击