### 装饰模式
动态地给一个对象添加一些额外地职责,就增加功能来说,装饰模式比生成子类更为灵活(摘抄)
装饰模式在添加功能方面确实非常灵活,当你需要给已经生成地类添加一个新的方法的时候,用装饰模式真的是太方便了,你只需要知道自己需要给哪一个对象添加哪一个方法就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类添加功能的作用
这样做最大的好处就是有效的把类的核心职责和装饰功能区分开了。而且可以去除相关类中重复的装饰逻辑(摘抄)
- 前言
- (1)代码无错就是优?——简单工厂模式
- (2)商场促销——策略模式
- (3)&(4)&(5) 设计模式原则
- (6)穿什么有这么重要?——装饰模式
- (7)为别人做嫁衣——代理模式
- (8)雷锋依然在人间——工厂方法模式
- (9)简历复印——原型模式
- (10)考题抄错会做也白搭——模板方法模式
- (11)迪米特法则
- (12)牛市股票还会亏钱?—— 外观模式
- (13)好菜每回味不同——建造者模式
- (14)老板回来,我不知道——观察者模式
- java实现事件委托
- (15)就不能不还DB吗?—— 抽象工厂模式
- (16)无尽加班何时休息——状态模式
- (17)在NBA我需要翻译——适配器模式
- (18)如果再回到从前——备忘录模式
- (19)分公司=部门——组合设计模式
- (20)想走?可以!先买票——迭代器模式
- (21)有些类也需计划生育——单例模式
- (22)手机软件何时统一——桥接模式
- (23)烤羊肉串引来的思考——命令模式
- (24)加薪非要老总批?——职责链模式
- (25)世界需要和平——中介者模式
- (26)项目多也别傻做——享元模式
- (28)男人和女人——访问者模式