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.装饰模式的缺点
产生很多相似的对象,容易出错。