装饰器模式(Decorator)

概述

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

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

接口类
package com.dahan.decorator;

/**
 * 大汉软件
 */
public interface Phone {
    // 打电话
    void call();
}
实现类
package com.dahan.decorator;

/**
 * 大汉软件
 */
public class MiPhone implements Phone {
    @Override
    public void call() {
        System.out.println("小米手机打电话");
    }
}
-------------------------
    package com.dahan.decorator;

/**
 * 大汉软件
 */
public class HuaweiPhone implements Phone {
    @Override
    public void call() {
        System.out.println("华为手机打电话");
    }
}
装饰器抽象类
package com.dahan.decorator;

/**
 * 大汉软件
 */
public abstract class PhoneDecorator implements Phone {
    protected Phone phone;

    public PhoneDecorator(Phone phone){
        this.phone = phone;
    }

    public void call() {
        phone.call();
    }
}
装饰器实现类
package com.dahan.decorator;

/**
 * 大汉软件
 */
public class PhoneDecoratorImpl extends PhoneDecorator {
    public PhoneDecoratorImpl(Phone phoneDecorator) {
        super(phoneDecorator);
    }

    @Override
    public void call() {
        super.call();
        set();
    }

    private void set() {
        System.out.println("打游戏");
    }
}
测试类
package com.dahan.decorator;


class PhoneDecoratorImplTest {
    public static void main(String[] args) {
        Phone miPhone = new MiPhone();
        miPhone.call();
        System.out.println("--------------");

        Phone phoneDecorator = new PhoneDecoratorImpl(miPhone);
        phoneDecorator.call();
        System.out.println("--------------");

        phoneDecorator = new PhoneDecoratorImpl(new HuaweiPhone());
        phoneDecorator.call();
    }
}

测试结果:

小米手机打电话
--------------
小米手机打电话
打游戏
--------------
华为手机打电话
打游戏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值