Java 设计模式之装饰模式

装饰模式Decorator:

动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加的灵活。
比如张三想穿衣服,不知道穿什么
我们这个时候就要给他装饰,让他穿上衣服
所以:首先由个Person类

public class Person {
    //姓名
    private String name;
    public Person(){}
    public Person(String name){
        this.name = name;
    }
    public void show(){
        System.out.println(name+"到底穿什么呢???");
    }
}

装饰类:继承Person类
可以是抽象类,也可以是普通类

public abstract class Decorate extends Person{
    protected Person person;
    public void setDecorate(Person person){
        this.person = person;
    }
    //展示
    public void show(){
        person.show();
    }
}

开始实现装饰:
穿T恤类

public class TShirt extends Decorate{
    private String TShirtName;
    public TShirt(String TShirtName){
        this.TShirtName = TShirtName;
    }
    public void show(){
        super.show();
        System.out.println("穿上"+TShirtName+"牌的T恤");
    }
}

穿鞋类:

public class Shoes extends Decorate {
    private String shoesName;
    public Shoes(String shoesName){
        this.shoesName = shoesName;
    }
    public void show(){
        super.show();
        System.out.println("穿上"+shoesName+"牌的鞋");
    }
}

测试类:

public class Client {
    public static void main(String[] args) {
        Person person = new Person("张三");
        TShirt tShirt = new TShirt("森马");
        Shoes shoes = new Shoes("特步");
        shoes.setDecorate(tShirt);
        tShirt.setDecorate(person);
        shoes.show();
    }
}
张三到底穿什么呢???
穿上森马牌的T恤
穿上特步牌的鞋

如果还想给张三穿上别的衣服,只需添加一个类,而不是在原有的类中进行修改,比如我在让它穿上领带。
领带类:

public class Tie extends Decorate {
    public void show(){
        super.show();
        System.out.println("穿上领带");
    }
}

客户端:

public class Client {
    public static void main(String[] args) {
        Person person = new Person("张三");
        TShirt tShirt = new TShirt("森马");
        Shoes shoes = new Shoes("特步");
        Tie tie = new Tie();

        shoes.setDecorate(tShirt);
        tShirt.setDecorate(tie);
        tie.setDecorate(person);
        shoes.show();
    }
}
张三到底穿什么呢???
穿上领带
穿上森马牌的T恤
穿上特步牌的鞋

所以装饰模式是为已有的功能动态的添加更多功能的一种方式,它能把每个要装饰的功能放在单独的类中,并让这个类包装她所要装饰的对象,因此当需要执行特殊的行为时,客户代码就可以在运行时根据需要有选择的,按顺序的使用装饰功能包装对象了。
总之,装饰模式的优点是,把类中的装饰功能从类中搬移去除,这样就可以简化原有的类。有效的把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值