装饰模式
装饰模式:在不对原有类进行修改的情况下动态的对它进行扩展一些功能
优点:
缺点:
component:装饰对象和被装饰对象的共同父类
concretecomponent:被装饰类,也为具体实现类
decorator:装饰类,自装饰类的父类
concretedecoratora:子装饰类,提供特定的装饰
concretedecoratorb:子装饰类,提供特定的装饰
更多的concretedecorator(c,d,e,f)
例子:武装机甲,一台机甲,没有任何装备,现在需要给机甲装上各种装备,机甲是被装饰对象,给机甲新增装备为装饰类,动态的添加武器装备和防具装备
被装饰对象与装饰对象的共同父类
/**
* @ author :fonxi
* @ date :2019/5/13 3:02
* @ description:装饰对象和被装饰对象的共同父类
*/
public interface component {
void operation();
}
被装饰对象,拥有完整的操作
/**
* @ author :fonxi
* @ date :2019/5/13 3:06
* @ description:被装饰者对象 机甲类
*/
public class concretecomponent implements component{
@override
public void operation() {
system.out.println("末日机甲前来报道,装备:");
}
}
装饰类,持有一个被装饰对象的引用,并且在被调用时,调用被装饰对象的方法
/**
* @ author :fonxi
* @ date :2019/5/13 3:09
* @ description:装饰类
*/
public abstract class decorator implements component {
//持有一个被装饰对象的引用
private component component;
public void setcomponent(component component) {
this.component = component;
}
@override
public void operation() {
if(component != null){
component.operation();
}
}
}
子装饰类,在调用提供特定的装饰操作时,调用父类方法
/**
* @ author :fonxi
* @ date :2019/5/13 3:18
* @ description:具体装饰类 机甲装备武器改装类
*/
public class concretedecoratora extends decorator{
@override
public void operation() {
super.operation();
system.out.println("改装:等离子高频激光剑");
}
}
同上
/**
* @ author :fonxi
* @ date :2019/5/13 3:28
* @ description:具体装饰类 机甲装备防具改装类
*/
public class concretedecoratorb extends decorator{
@override
public void operation() {
super.operation();
system.out.println("改装:全适应立场防护盾");
}
}
输出结果:
末日机甲前来报到,装备:
改装:等离子高频激光剑
改装:全适应立场防护盾
装饰模式能动态的扩展一个类,并且不修改原来的类,能够灵活的增删,比继承要好。(感觉作用和代理模式有点象^_^)
如对本文有疑问, 点击进行留言回复!!
荐 厉害了!阿里P8架构师用4大技术文档带你深入解读爆火的中台战略
FlowableException: Error initialising dmn data model报错问题
网友评论