java设计模式(六)—— 装饰器模式

 

其实就是一个类包装一个类传递来的对象实现

https://www.cnblogs.com/jzb-blog/p/6717349.html

1.抽象构件

/**
 * 定义作为人类应有的一些规范
 */
public interface Human {
    void eating();
}

2.具体构件

/**
 * 具体构件类
 */
public class Man implements Human{
    @Override
    public void eating() {
        System.out.println("吃刚刚捕获的美味佳肴");
    }
}

3.抽象装饰类 (3,4可合并,4多此一举)

/**
 * 抽象装饰者,需要实现抽象构件接口
 */
public abstract  class Decorator implements Human{
    //维持对抽象构件的引用
    private Human human;
    //注入构件实例
    public Decorator(Human human) {
        this.human = human;
    }

    @Override
    public void eating() {
        human.eating();
    }
}

注意: 在Decorator中并未真正实现eat()方法,而只是调用原有Human对象的eating()方法,它没有真正实施装饰,而是提供一个统一的接口,将具体装饰过程交给子类完成。

4.具体装饰类

public class ConcreteDecorator extends Decorator {
    public ConcreteDecorator(Human human){
        super(human);
    }

    @Override
    public void eating() {
        System.out.println("把捕捉的动物给烤熟了,在加些配料");
        super.eating();
        System.out.println("吃完饭之后洗手");
    }
    //需要增加的其他方法
}

5.测试类

public class Demo {
    public static void main(String[] args){
        Human man = new Man();
        //没进行装饰之前
        man.eating();
        System.out.println("--------------------");
        //进行装饰之后
        man = new ConcreteDecorator(man);
        man.eating();
    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值