一、前言:
二、代码实现:
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","打上加急标识");
}
}