装饰器模式

一、前言:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、代码实现:

1、客户端调用
 private void initEvent8() {
        AbstractFactory factory = new AppleFactory();
        //得到水果
        Fruit fruit = factory.getFruit();
        fruit.draw();
        //得到包装
        Bag bag = factory.getBag();

        //现需要增加防伪标识
        bag = new CheckedBagDecorator(bag);//防伪功能
        bag = new ReinforceBagDecorator(bag);//加固功能
        bag = new SpeedDecorator(bag);//加急功能
        bag.pack();
    }
2、AbstractFactory
/**
 * 抽象水果工厂
 */
public abstract class AbstractFactory {
    public abstract Fruit getFruit();

    public abstract Bag getBag();
}
3、AppleFactory
public class AppleFactory extends AbstractFactory {
    @Override
    public Fruit getFruit() {
        return new Apple();
    }

    @Override
    public Bag getBag() {
        return new AppleBag();
    }
}
4、CheckedBagDecorator
/**
 * 防伪功能
 */
public class CheckedBagDecorator extends BagDecorator {

    public CheckedBagDecorator(Bag bag) {
        super(bag);
    }
    public void pack(){
        super.pack();
        checked();//打印防伪标识
    }

    private void checked() {
       // Log.d("LUO","")
        Log.d("LUO","------");
        Log.d("LUO","打印防伪标识");
    }
}
5、ReinforceBagDecorator
/**
 * 加固功能
 */
public class ReinforceBagDecorator extends BagDecorator {
    public ReinforceBagDecorator(Bag bag) {
        super(bag);
    }

    public void pack() {
        super.pack();  //调用原有业务方法
        reinforce();
    }

    //加固包装
    public void reinforce() {
//        System.out.println("------");
//        System.out.println("加固了包装");
        Log.d("LUO","------");
        Log.d("LUO","加固了包装");
    }
}

6、SpeedDecorator
/**
 * 加急功能
 */
public class SpeedDecorator extends BagDecorator {
    public SpeedDecorator(Bag bag) {
        super(bag);
    }

    public void pack() {
        super.pack();  //调用原有业务方法
        speedy();
    }

    //快件加急
    public void speedy() {
        System.out.println("------");
        System.out.println("打上加急标识");
        Log.d("LUO","------");
        Log.d("LUO","打上加急标识");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值