土地主大维德之装饰器模式: 睡觉的花样

我们的主人公大维德是江苏泰兴中部一个小县城的一个暴发户的儿子,他不学无术,仗着家里开了一个厂,有着3个宅基地,好吃懒做,不学无术,这种人呀,也就表面上 看上去是个人,我们看一下他的日常睡觉,就一个睡觉都能被玩出花样来。

想要实现装饰器模式,需要有以下四样东西:

  1. 抽象构件接口:定义具体构件类的接口。
  2. 具体构件类(被装饰类):实现抽象构件接口,抽象组件的具体实现。
  3. 装饰抽象类:实现抽象构件,规定实现类要实现的方法,并组合具体构建类的对象。
  4. 具体装饰类:继承装饰抽象类,实现方法。

/**
 *
 * 抽象构件接口:定义可以动态添加任务的对象的接口
 * 一条狗
 */
public interface Component {
    void say();
    String sleep();
}

/**
 * 具体构件类:定义一个要被装饰器装饰的对象
 * 例如大维德
 */
class DavidComponent  implements Component{
    @Override
    public void say() {
        System.out.println("你好,我叫大维德,我家开厂的,窈窕淑女,君子好逑!。");
    }

    @Override
    public String sleep() {
        return "睡觉";
    }
}
/**
 * 装饰抽象类:Decorator:维护对象和其子类的引用
 */
public abstract class Decorator implements Component{
    // 每个装饰者都包装一个组件
    Component component;

    @Override
    public void say() {
        component.say();
    }
}

 具体的装饰类:金莲、w红

/**
 * 具体装饰类: 金莲
 * 向对象添加新的功能或行为特征
 */
class CheMoDecorator extends Decorator{
    public CheMoDecorator(Component component) {
        this.component = component;
    }

    @Override
    public String sleep() {
        return "约金莲" + component.sleep();
    }
}

/**
 * 具体装饰类: w红
 * 向对象添加新的功能或行为特征
 */
class WangHongDecorator extends Decorator{
    public WangHongDecorator(Component component) {
        this.component = component;
    }

    @Override
    public String sleep() {
        return "约个科技身材的w红" + component.sleep();
    }
}

 测试类:

public class DecoratorTest {
    public static void main(String[] args) {
        DavidComponent david = new DavidComponent();
        david.say();
        System.out.println(david.sleep());
        System.out.println("-------------------");

        PanJinLianDecorator panJinLian = new PanJinLianDecorator(david);
        panJinLian.say();
        System.out.println(panJinLian.sleep());

        System.out.println("----- 约一个 不过瘾,再加一个  ---");
        // 在不影响其他对象的情况下,快速动态透明地为单个对象添加功能
        WangHongDecorator wangHongDecorator = new WangHongDecorator(panJinLian);
        wangHongDecorator.say();
        System.out.println(wangHongDecorator.sleep());
    }
}

运行结果:

你好,我叫大维德,我家开厂的,我只会吃喝
睡觉
-------------------
你好,我叫大维德,我家开厂的,我只会吃喝。
约个金莲睡大大觉
----- 一个不过瘾,再加一个  ---
你好,我叫大维德,我家开厂的,我只会吃喝。
约个科技身材的w红,约个金lian睡觉

 总结:

装饰者模式可以带来比继承更加灵活性的扩展功能,使用更加方便,可以通过组合不同的装饰者对象来获取具有不同行为状态的多样化的结果。

装饰者模式,就是装饰者(Docorator)需要继承与被装饰者(Component),并且持有被装饰者的引用(Component)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值