(6)穿什么有这么重要?——装饰模式
最后更新于:2022-04-01 14:30:13
### 装饰模式
动态地给一个对象添加一些额外地职责,就增加功能来说,装饰模式比生成子类更为灵活(摘抄)
装饰模式在添加功能方面确实非常灵活,当你需要给已经生成地类添加一个新的方法的时候,用装饰模式真的是太方便了,你只需要知道自己需要给哪一个对象添加哪一个方法就ok了
装饰模式一般用在增加原有类的核心职责或主要行为,在主类中加入了新的字段,新的方法和新的逻辑,从而增加了主类的复杂度。
~~~
public interface SuperC
{
void Operation();
}
public class Concrete implements SuperC
{
@Override
public void Operation() {
//被修饰的类的基本操作
}
}
public class Decorator implements SuperC
{
SuperC super1;
public void setSuper (Super super1)
{
this.super1 = super1;
}
@Override
public void Operation()
{
if (super1 != null)
{
super1.Operation();
}
}
}
public class DecoratorA extends Decorator
{
@Override
public void Operation()
{
super.Operation();
// 自己的操作
}
}
public class DecoratorB extends Decorator
{
@Override
public void Operation()
{
super.Operation();
// 自己的操作
}
public void SpecialB()
{
}
}
public class DecoratorC extends Decorator
{
@Override
public void Operation()
{
super.Operation();
// 自己的操作
}
public void SpecialC()
{
}
}
~~~
调用代码:
~~~
public static void main (String args[])
{
Concrete concrete = new Concrete();
DecoratorA a = new DecoratorA();
DecoratorB b = new DecoratorB();
DecoratorC c = new DecoratorC();
a.setSuper(concrete);
//体现装饰模式优势的地方来了
b.setSuper(a);
c.setSuper(a);
}
~~~
有没有看出来有什么好处呢?
给类动态添加所需方法的优势一下就体现了,当有需要两个两个对象分别有ab和ac两种方法,这样就可以很方便,而且当你需要添加更多的方法的时候,写一个Decorator的子类,然后添加你需要装饰的对象就可以了,继承于Decorator类的功能类都是起到为Concrete类添加功能的作用
这样做最大的好处就是有效的把类的核心职责和装饰功能区分开了。而且可以去除相关类中重复的装饰逻辑(摘抄)