装饰模式(Dcorator)

装饰模式(Dcorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

主函数

public class main {
    public static void main(String[] args) {
        Person xc = new Person("小菜");

        System.out.println("\n第一种装扮");

        Sneakers pqx = new Sneakers();
        BigTrouser kk = new BigTrouser();
        TShirts dtx = new TShirts();

        pqx.Decorate(xc);
        kk.Decorate(pqx);
        dtx.Decorate(kk);
        dtx.Show();

        System.out.println("\n第二种装扮");

        LeatherShoes px = new LeatherShoes();
        Tie ld = new Tie();
        Suit xz = new Suit();

        px.Decorate(xc);
        ld.Decorate(px);
        xz.Decorate(ld);
        xz.Show();
    }
}

装饰器父类(顶级类)

public class Person {
    public Person() {

    }
    private String name;
    public Person(String name) {
        this.name = name;
    }

    public void Show() {
        System.out.println("装扮的{"+name+"}");
    }
}

子类

public class Finery extends Person {
    protected Person component;

    public void Decorate(Person component) {
        this.component = component;
    }

    @Override
    public void Show() {
        if(component != null)
            this.component.Show();
    }
}

孙子类

public class Sneakers extends Finery {
    public void Show() {
        System.out.print("破球鞋 ");
        super.Show();
    }
}
public class BigTrouser extends Finery {
    public void Show() {
        System.out.print("垮裤 ");
        super.Show();
    }
}
public class Suit extends Finery {
    public void Show() {
        System.out.print("西装 ");
        super.Show();
    }
}
public class Tie extends Finery {
    public void Show() {
        System.out.print("领带 ");
        super.Show();
    }
}
public class TShirts extends Finery {
    public void Show() {
        System.out.print("大T恤 ");
        super.Show();
    }
}
public class LeatherShoes extends Finery {
    public void Show() {
        System.out.print("皮鞋 ");
        super.Show();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式基本原则 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。开-闭原...
    西山薄凉阅读 9,346评论 3 14
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 9,390评论 1 15
  • 1 场景问题# 1.1 复杂的奖金计算## 考虑这样一个实际应用:就是如何实现灵活的奖金计算。 奖金计算是相对复杂...
    七寸知架构阅读 9,587评论 4 67
  • 设计原则: 少用继承,多用组合 类应该对扩展开放,对修改关闭 目录 本文的结构如下: 什么是装饰者模式 为什么要用...
    w1992wishes阅读 4,973评论 0 7
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,387评论 2 17

友情链接更多精彩内容