装饰器模式【女生化妆】

女生先有一个基础的展示行为,抽象出来定义为接口Showable

public interface Showable {
    
    public void show(); //标准展示行为
    
}

定义女生类并描述行为

public class Girl implements Showable {

    @Override
    public void show() {
        System.out.println("女生的素颜");
    }
}

当前只是素颜,要开始化妆了

定义装饰器抽象类

public abstract class Decorator implements Showable {

    protected Showable showable;

    public Decorator(Showable showable){
        this.showable=showable;
    }
    @Override
    public void show() {
        //直接调用不加任何装饰
        showable.show();
    }
}

定义粉底类继承装饰器类

public class FoundationMakeup extends Decorator {

    public FoundationMakeup(Showable showable){
        super(showable); //调用抽象父类的构造注入
    }
    @Override
    public void show() {
        System.out.print("打粉底【");
        super.show();
        System.out.print("】");
    }
}

定义口红类继承装饰器类

public class Lipstick extends Decorator {

    public Lipstick(Showable showable){
        super(showable);
    }

    @Override
    public void show() {
        System.out.print("涂口红【");
        super.show();
        System.out.print("】");
    }
}

粉底类和口红类都有自己特有的打粉底和涂口红的操作

测试类

public class Client {
    public static void main(String[] args) {

        //口红包裹粉底,粉底再包裹女生
        Showable madeupGirl = new Lipstick(new FoundationMakeup(new Girl()));
        madeupGirl.show();
    }
}

测试类中出现了多层构造方法,调用已经装饰好的madeupGirl对象的show方法,所有装饰效果一触即发。

装饰器模式类结构:

组件接口:被装饰组件对应的接口标准,指定进行装饰的行为方法,如本例接口Showable。

组件实现:需要被装饰的组件,实现组件接口标准,只具备自身未被装饰的原始特性,如本例中女生类Girl。

装饰器:装饰器的高层抽象类,同样实现组件接口标准,且包含一个被装饰的组件。

装饰器实现:继承自装饰器抽象类的具体子类装饰器,可以有多种实现,并在被装饰组件对象的基础上为其添加新的特性。如本例中的粉底类和口红类。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值