设计模式之装饰模式

  • 定义:动态的给一个对象添加一些额外的职责,就添加功能来说,装饰模式比生成子类更灵活
  • 给已有的功能动态添加更多功能的一种方式
  • 当系统需要新的功能时,时想旧的类中添加新的代码,这些新的代码主要装饰了新的功能或者核心职责
  • 在主类中添加新的代码,新的属性或者新的逻辑,从而添加的主类的复杂度
  • 装饰模式提供了一个非常好的解决方案,它吧每个要装饰的功能放在,并让这个类包装它所要装饰的对象,因此在需要装饰特殊行为时,客户代码就可以根据需要选择,按照顺序的使用装饰了功能的对象
  • 吧类中装饰功能从类中搬移去除,这样可以简化原有的类
  • 有效的当类的核心职责与装饰功能区分开,从而可以去除类中重复装饰逻辑

组件类(Component) Person.Class

public interface Person {
    void eat();
}

具体组件类(ConcreteComponent) Man.Class

public class Man implements Person {
    @Override
    public void eat() {
        System.out.println("男人再吃");
    }
}

装饰类(Decorator) Decorator.Class

public abstract class Decorator implements Person{

    protected Person person;

    public void setPerson(Person person) {
        this.person = person;
    }

    public void eat() {
        person.eat();
    }
}

具体装饰类(ConcreteDecrator) ManDecorator.Class

public class ManDecoratorA extends Decorator {
    @Override
    public void eat() {
        super.eat();
        reEat();
        System.out.println("ManDecoratorA类");
    }

    public void reEat() {
        System.out.println("再吃一顿饭");
    }
}

具体装饰类B(ConcreteDecortor) ManDecorator.Class

public class ManDecoratorB extends Decorator {
    @Override
    public void eat() {
        super.eat();
        reEat();
    }

    private void reEat() throws RuntimeException{
        System.out.println("==========");
        System.out.println("ManDecoratorB");
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值