week03
总结
设计模式是一种可以重复使用的设计方案。
一个设计模式的四个部分:
模式的名称 - 由少量的字组成的名称,有助于我们表达我们的设计。
待解问题 - 描述了何时需要运用这种模式,以及运用模式的环境(上下文)。
解决方案 - 描述了组成设计的元素(类和对象)、它们的关系、职责以及合作。但这种解
决方案是抽象的,它不代表具体的实现。
结论 - 运用这种方案所带来的利和弊。主要是指它对系统的弹性、扩展性、和可移植性的
影响。
设计模式的分类
从功能分
• 创建模式(Creational Patterns)
对类的实例化过程的抽象。
• 结构模式(Structural Patterns)
将类或者对象结合在一起形成更大的结构。
• 行为模式(Behavioral Patterns)
对在不同的对象之间划分责任和算法的抽象化。
从方式分
• 类模式
以继承的方式实现模式,静态的。
• 对象模式
以组合的方式实现模式,动态的
Singleton 模式保证产生单一实例,就是说一个类只产生一个实例。使用 singletong 有
两个原因:
是因为只有一个实例,可以减少实例频繁创建和销毁带来的资源消耗;
是当多个用户使用这个实例的时候,便于进行统一控制(比如打印机对象)。
前者是性能需求,后者是功能需求。
模板方法模式(Template Method)
模板方法模式是扩展功能的最基本模式之一
• 它是一种“类的行为模式”
它是通过“继承”的方法来实现扩展
• 基类负责算法的轮廓和骨架
• 子类负责算法的具体实现
组合 vs. 继承
• 基于“继承”的模板方法比“组合”更容易实现
• 在很多情况下,可以适当使用这种模式。
模板方法的形式
抽象方法
• protected abstract void step1();
• 强制子类实现该步骤。
具体方法
• protected void doSomething() { … }
• 子类不需要覆盖,但也可以覆盖之。
• 如想明确告诉子类“不要覆盖它”,最好标明:final
钩子方法
• protected void setUp() { }
• 空的实现(缺省适配器模式)
• 子类可选择性地覆盖之,以便在特定的时机做些事。
什么时候使用策略模式?
系统需要在多种算法中选择一种
重构系统时,
• 将条件语句转换成对于策略的多态性调用
策略模式的优点(对比模板方法)
• 将使用策略的人与策略的具体实现分离
• 策略对象可以自由组合
策略模式可能存在的问题:
• 策略模式仅仅封装了“算法的具体实现”,方便添加和替换算法。但它并不关心何时使用何
种算法,这个必须由客户端来决定。
装饰器模式
装饰器模式也被笼统地称为“包装器”(Wrapper)
• 适配器也被称作“包装器”,区别在于适配器是转换成另一个接口,而装饰器是保持接口不变。
• 包装器形成一条“链”。
装饰器的优缺点
装饰器和模板方法、策略模式的比较
• 装饰器保持对象的功能不变,扩展其外围的功能
• 模板方法和策略模式则保持算法的框架不变,而扩展其内部的实现
装饰器和继承的比较
• 都可以用来扩展对象的功能
• 但装饰器是动态的,继承是静态的
• 装饰器可以任意组合
但这也使装饰器更复杂,有可能会组合出荒谬的结果
装饰器的应用
Java Servlet 中的应用
• HttpServletRequest/HttpServletRequestWrapper
• HttpServletResponse/HttpServletResponseWrapper
同步化装饰器
• Collections. synchronizedList(list)
• 取代原先的 Vector、Hashtable 等同步类。
Java I/O 类库简介
• 核心 - 流,即数据的有序排列,将数据从源送达目的地。
• 流的种类
InputStream、OutputStream - 代表byte流(八位字节流)
Reader、Writer - 代表char流(Unicode 字符流)
• 流的对称性
输入-输出对称
Byte-Char 对称
因此我们只要学习任意一种流,就可以基本了解其它所有的流。
评论