装饰器模式(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();
    }
}

测试结果:

小米手机打电话
--------------
小米手机打电话
打游戏
--------------
华为手机打电话
打游戏
posted @ 2023-02-06 22:56  土木转行的人才  阅读(32)  评论(0编辑  收藏  举报