我们以下单为例,先创建一个度假订单,然后后面业务扩展,发现在度假订单里面增加卖保险的功能。
创建的文件有 BaseCreateOrder.java
、TourOrderCreate.java
、Decorator.java
、InsuranceDecorator.java
和TestMain.java
文件。文件创建完毕,目录结构如下图:
BaseCreateOrder.java
代码如下:
package net.haicoder.decorator;
/**
* 基类创建订单
*/
public abstract class BaseCreateOrder {
public abstract void createOrder();
}
TourOrderCreate.java
具体的实现创建度假订单的逻辑。代码如下:
package net.haicoder.decorator;
public class TourOrderCreate extends BaseCreateOrder {
public void createOrder() {
System.out.println("嗨客网(www.haicoder.ner)");
System.out.println("创建度假订单");
}
}
Decorator.java
抽象装饰类,里面包含了抽象的创建订单的类。代码如下:
package net.haicoder.decorator;
public abstract class Decorator extends BaseCreateOrder {
private BaseCreateOrder createOrder;
public Decorator(BaseCreateOrder createOrder) {
this.createOrder = createOrder;
}
public void createOrder() {
createOrder.createOrder();
}
}
InsuranceDecorator.java
具体装饰类,继承了抽象的装饰类,里面有具体实现抽象逻辑的代码。代码如下:
package net.haicoder.decorator;
/**
* 具体装饰角色,负责给组件添加职责
* 把被传递的对象包装
*/
public class InsuranceDecorator extends Decorator {
public InsuranceDecorator(BaseCreateOrder createOrder) {
super(createOrder);
}
public void createOrder() {
super.createOrder();
System.out.println("创建订单的时候,添加了保险资源");
}
}
TestMain.java
文件代码如下:
package net.haicoder.decorator;
public class TestMain {
public static void main(String[] args) {
BaseCreateOrder createOrder = new TourOrderCreate();
InsuranceDecorator insuranceDecorator = new InsuranceDecorator(createOrder);
insuranceDecorator.createOrder();
}
}
程序运行后,控制台输出信息如下:
设计模式中装饰者模式替代了继承关系,简化了程序结构,为其装饰的对象增强功能,其对扩展开放,对修改关闭。