装饰模式在开发过程中我们会使用到,下面对装饰模式进行案列学习:
首先
1.装饰优点:
装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
2 .缺点
多层装饰比较复杂。
一般场景模式:
a.扩展一个类的功能。
b.动态增加功能,动态撤销。
举例
场景描述:假设我们平时去上班需要走路,下班回家也需要走路,共同点是走路,不同点一个是回家,一个是上班对这场景设计一个装饰类完成动作。
1.定义一个操作接口,实现类去实现具体逻辑(上班,回家)
/**
* @author zhaoyy
* @version 1.0
* @description TODO
* @date 2022/9/20
**/
public interface OperationType {
public String operation();
}
2对接口实现类:
/**
* @author zhaoyy
* @version 1.0
* @description TODO
* @date 2022/9/20
**/
public class GoWorkOperationType implements OperationType{
@Override
public String operation() {
return "go work";
}
}
/**
* @author zhaoyy
* @version 1.0
* @description TODO
* @date 2022/9/20
**/
public class GoHomeOperationType implements OperationType{
@Override
public String operation() {
return "go home";
}
}
3.创建一个适配类完成整个流程操作
/**
* @author zhaoyy
* @version 1.0
* @description 装饰类
* @date 2022/9/20
**/
public class DecorateClass {
private OperationType operationType;
public DecorateClass(OperationType operationType) {
this.operationType = operationType;
}
private String commonOperation(){
return "走路";
}
public void process(){
String operation = operationType.operation();
System.out.println(operation);
String common = this.commonOperation();
System.out.println(common);
}
}
最后测试类:
public class Test {
public static void main(String[] args) {
DecorateClass goHome = new DecorateClass(new GoHomeOperationType());
goHome.process();
System.out.println("=========================================================");
DecorateClass goWork = new DecorateClass(new GoWorkOperationType());
goWork.process();
}
}
测试结果:
说明
上面列子可以看出,不管是回家还是去工作都需要走路,代码比较简单不做过多说明,最主要是分享装饰类的设计模式,大家在工作中可以根据自己业务场景设计自己的装饰类,去处理相应业务逻辑。设计优点,代码结构具有层次,易扩展,便于后期维护和理解。