26.装饰模式(decorator pattern)

1.我理解的模式(是面向抽象编程的具体实践已期符合开闭原则,提高代码的可维护性和可复用性)

2.设计模式分类

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

3.装饰模式的结构

 

 

 

4.客户端怎么使用?链式调用

 

5.什么情况下使用?

(1)扩展一个类的功能

(2)动态地给一个lei增加功能

(3)会涉及到附加功能的排列组合

6.为什么不用继承?

(1)继承关系是编译时确定的,不够灵活

(2)继承在处理涉及到附加功能的排列组合的情况时,将会产生非常多的类。

 

看例子:

(1)YaSe--Hero--Skills-SkillQ-SkillW-SkillE-SkillR

(2)Java-io

 

7.透明的装饰模式和半透明的装饰模式

透明的装饰模式:

Component c = new ConcreteComponent();

Component c1 = new ConcreteDecorator(c);

c1.method();

不透明的装饰模式:

Component c = new ConcreteComponent();

ConcreteDecorator c1 = new ConcreteDecorator(c);

c1.newMethod();

8.使用不透明的装饰模式实现一个可以搜索的字符流。【看例子SearchReader】

9.模式的简化

注意几点:

(1)一个装饰类的接口必须与被装饰类的接口相容,即ConcreteDecorator类必须继承自一个共同的父类Component

(2)不要把太多的逻辑放到Component类中。

(3)如果只有一个ConcreteComponent,可以没有Component。

(4)如果ConcreteDecorator类少于3个,可以省略Decorator

10.装饰模式的缺点

产生很多相似的对象,容易出错。

posted @ 2018-11-15 13:01  freelymen  阅读(106)  评论(0编辑  收藏  举报