装配模式 decorator
装配模式与适配器模式的比较:
适配器模式适合下位切换 ( 服务模块变化 ) ,装配模式适合上位切换 ( 主模块变化 ) 。
说 明: 装配模式的 优 缺点基本和 单 向适配器模式相反,可根据 实际 情况 进 行 选择 :
服务模块变化较多时,使用适配器模式;主模块变化较多时,使用装配模式 。
引子:使用单向适配器模式的优缺点(不使用装饰模式)
package com.javaeye.kang.decorator;
/** * 单 向适配器模式是在主模 块 中接入一个 扩 展模 块 ,使用 继 承法 * 优势 :能 够 很好地 应 付 扩 展模 块 的切 换 (下位切 换 ,服 务 模 块 切 换 ) * 缺点: 扩 展模 块 无法很好地 应 付主模 块 的切 换 (上位切 换 ,主模 块 切 换 ) * 缺点 举 例: 现 在 Convert 为 ReadFromFile 服 务 ,将来又要求 为 ReadFromNet 服 务 。 * 使用 单 向适配器模式的 话 ,就必 须 再 为 ReadFromNet 编 写子 类 ,比 较 麻 烦 。 */
// 主模 块 class ReadFromFile { public void read() { System. out .println( " 从文件 读 取字符串 " ); } }
// 扩 展模 块 class Convert { public void convertToUpper() { System. out .println( " 转换 成大写字母 " ); } }
// 单 向适配器模式 class SubReadFromFile extends ReadFromFile { private Convert convert ; public SubReadFromFile(Convert convert) { this . convert = convert; } public void read() { super .read(); convert .convertToUpper(); } }
// 客 户 端,最 终 使用方 public class AdapterTest { public static void main(String[] args) { SubReadFromFile srff = new SubReadFromFile( new Convert()); srff.read(); } } |
测试结果:
从文件读取字符串
转换成大写字母