Adapter模式(四 Evaluation 本质上是两种重用模型 class adapter: 无法 adapt adapter的子类,但是可以重载 adaptee的行为 object adapter 可以 adapt adaptee所有子类 How much adapting does Adapter do? Pluggable adapters Using two-way adapters to provide transparency 针对 class adapter,用多重继承来实现
Adapter模式(四) • Evaluation – 本质上是两种重用模型 – class adapter: • 无法adapt adaptee的子类,但是可以重载adaptee的行为 – object adapter • 可以adapt adaptee的所有子类 – How much adapting does Adapter do? – Pluggable adapters – Using two-way adapters to provide transparency • 针对class adapter,用多重继承来实现
Adapter模式(五) Implementation 使用C艹继承机制实现 ass adapter 使用内嵌对象技术实现 object adapter Pluggable adapters,三种实现方案 使用抽象方法定义 使用代理对象 参数化技术 这三种方法的实质:如何在一个类中定义抽象 操作,供客户插入? hook技术
Adapter模式(五) • Implementation – 使用C++继承机制实现class adapter – 使用内嵌对象技术实现object adapter – Pluggable adapters,三种实现方案 • 使用抽象方法定义 • 使用代理对象 • 参数化技术 这三种方法的实质:如何在一个类中定义抽象 操作,供客户插入?—— hook 技术
Adapter模式(六) Related patterns Bridge Decorator Proxy Examples Draw Cli: COleDrawOb C++ STL COM中的site Drawing Editor Shape Textview Bounding Boxo GelExtento CreateManipulatoru text Line Texts BoundingBoxo BoundingBoxo retum texl->GetExtento CreateManipulatorO) CreateManipulator( D retum new TextManipulatol
Adapter模式(六) • Related Patterns – Bridge – Decorator – Proxy • Examples – DrawCli:COleDrawObj – C++ STL – COM中的site
模式8: Bridge(一) Aliases: Handle/bod Intent Decouple an abstraction from its implementation so that the two can vary independentl Motivation 要做到“抽象(接口)与实现分离”,最常用的办法 是定义一个抽象类,然后在子类中提供实现。也就 是说,用继承机制达到“抽象(接口)与实现分离” 但是这种方法不够灵活,继承机制把实现与抽象部 分永久地绑定起来,要想独立地修改、扩展、重用 抽象(接口)与实现都非常困难
模式 8:Bridge(一) • Aliases:Handle/Body • Intent – Decouple an abstraction from its implementation so that the two can vary independently • Motivation – 要做到“抽象(接口)与实现分离”,最常用的办法 是定义一个抽象类,然后在子类中提供实现。也就 是说,用继承机制达到“抽象(接口)与实现分离” – 但是这种方法不够灵活,继承机制把实现与抽象部 分永久地绑定起来,要想独立地修改、扩展、重用 抽象(接口)与实现都非常困难
Bridge模式(二) Applicability: Use the Bridge pattern when 编译时刻无法确定抽象(接口)与实现之间的关系 抽象部分与实现部分都可以通过子类化而扩展 对一个实现的修改不影响客户(无须重新编译) 在C艹+中,对客户完全隐瞒实现细节 因为扩展的原因,需要把。个类分成两部分,(以便 灵活组合) 在多个对象之间共享数据,但客户不需要知道
Bridge模式(二) • Applicability:Use the Bridge pattern when – 编译时刻无法确定抽象(接口)与实现之间的关系 – 抽象部分与实现部分都可以通过子类化而扩展 – 对一个实现的修改不影响客户(无须重新编译) – 在C++中,对客户完全隐瞒实现细节 – 因为扩展的原因,需要把一个类分成两部分,(以便 灵活组合) – 在多个对象之间共享数据,但客户不需要知道