1.Delegation
关联association 对象之间的持久关系,允许一个对象实例引起另一个对象实例执行一个动作。
依赖dependency 对象之间的临时关系
组合composition 将简单对象组合形成更复杂对象;并且当组合出的对象被破坏时,包含的对象也被破坏
聚合aggregation 当组合对象被破坏时,包含对象不一定被破坏
2.Whitebox frameworks
扩展方式:子类、重写
设计模式:模版方法模式
(main方法在子类中,但控制权还在framework)
design-subclassing:
允许扩展每个非private的方法
需要了解父类的实现
一次只能扩展一个
一般都是开发者框架
共同编译
3.Blackbox frameworks
扩展方式:接口插件
设计模式:策略模式、观察者模式
(插件加载模式加入插件,控制权在framework)
design-composition:
允许扩展接口暴露出的功能
只需要了解接口的含义
多重插件
通常提供更多的模块化
可以分别部署
一般是最终用户/平台框架
4.framework design
Typical
·定义域
-识别潜在的共同部分和可变部分
-设计和编写示例的插件和应用
·分解和实现作为框架的通用部分
·为可变部分提供插件接口和回调机制
-在适当的地方使用设计模式
·获得大量反馈并迭代
Evolutionary(获取共性)
·提取接口
-从具体类中提取抽象类
-从抽象类中提取接口
·结构稳定就开始
-从类中删除non-public方法
-将缺省的实现移到实现了接口的抽象类中
5.design pattern for reuse
Structural pattern--如何组合类和对象
·Adapter 适配器模式
对旧的不兼容组件进行封装,使其能在新系统中被使用
一般是创建一个类实现新系统的接口,并继承/委托旧的不兼容类,在新方法中调用旧方法
·Decorator 装饰器模式
需要对单独的对象进行任意动态的扩展
Component接口 定义操作或装饰器可以执行的功能
ConcreteComponent类 是可以动态添加起始对象,首先创建该对象再装饰它
Decorator(抽象)类 是所有装饰器的父类,虽然它实现了组件接口来定义操作,但它还包含一个受保护的变量组件,该组件指向要装饰的对象。 组件变量只在构造函数中分配
ConcreteDecorator类 是可以添加特征的实际装饰类,可以根据自己的喜好制作任意数量的ConcreteDecorator类,并且每个代表一个可添加的功能
·Facade 外观模式
客户社区的一部分需要一个简化的界面来实现复杂子系统的整体功能
为子系统中的一组接口提供统一接口
Facade定义了一个更高层次的接口,使得子系统更易于使用 - 使用更简单的接口包装复杂的子系统
Behavioral pattern--类和对象如何交互分配责任
·Strategy 策略模式
针对特定任务存在不同的算法,客户端可以在运行时根据上下文在算法之间自由切换
为算法创建一个接口,并为算法的每个变体实现一个类
·Template method 模版模式
不同的客户端具有相同的算法步骤,但是每个步骤的具体实现不同
在父类中定义通用逻辑和各步骤的抽象方法声明
子类中进行各步骤的具体实现
·Iterator 迭代器模式
客户需要统一策略来访问容器中的所有元素,而与容器类型无关
设计一个迭代的策略模式
Abstract Iterator class 定义遍历协议
Concrete Iterator subclass 对应每个聚合的具体实例
Aggregate instance 创建Iterator对象的实例 保持对Iterator的引用