适配器模式(结构型模式)

适配器模式(结构型模式)

1.类结构型模式

关心类的组合 由多个类组合成一个更大的系统 一般只存在继承关系与实现关系

2.对象结构型模式

关心类与对象的组合 通过关联关系 在一个类中定义另一个类的实例对象

合成复用原则:系统中应尽量使用关联关系替代继承关系

适配器模式

定义:将一个类的接口转换成客户希望的另一个接口,让接口不兼容的类可以一起工作。
组成:Target Adapter Adaptee

目标抽象类:定义客户所需的接口
适配器类:实现Target接口并继承Adaptee类
适配者类:被适配的角色 定义一个已存在的接口 包含客户希望使用的业务方法

类适配器模式

提供一个中间类Adapter,实现抽象目标类接口Target,继承适配者类

class Adapter:Adaptee,Target
{
 public void Request()
 {
  base.SpecificRequest();
 }
}

对象适配器模式

适配器类与适配者类是关联关系(委派关系)

adaptee
Client
Target
+Request()
Adapter
+Request()
Adaptee
+SpecificRequest()
class Adapter:Target
{
 private Adaptee adaptee; //维持一个对适配者对象的引用
 public Adapter(Adaptee adaptee)
 {
  this.adaptee = adaptee;
 }
 public void Request()
 {
  adaptee.SpecificRequest();//转发调用
 }
}

适配器模式强调对代码的组织,而不是功能的实现。

缺省适配器模式(单接口适配器模式)

定义:不需要实现一个接口所提供的所有方法时,可先设计一个抽象类实现该接口,并为接口中的每个方法提供一个默认实现(空方法),抽象类的子类可有选择的覆盖父类的某些方法实现需求。
ServiceIntelface:适配者接口,声明大量方法
AbstractServiceClass:缺省适配器抽象类,使用空方法实现形式
ConcreteServiceClass:具体业务类,继承适配器类,根据需要选择需要使用的方法

«interface»
ServiceIntelface
+ServiceMethod1()
+ServiceMethod2()
+ServiceMethod3()
«abstract»
AbstractServiceClass
+ServiceMethod1() : void
+ServiceMethod2() : void
+ServiceMethod3() : void
ConcreteServiceClass
+ServiceMethod1() : void

双向适配器模式

适配器中同时包含对目标类和适配者类的引用,适配者可调用目标类中的方法,目标类可调用适配者类的方法

class Adapter:Target,Adaptee
{
 private Target target; //维持一个对抽象目标类的引用
 private Adaptee adaptee; //维持一个对适配者对象的引用
 
  public Adapter(Target target)
 {
  this.target = target;
 }
 public Adapter(Adaptee adaptee)
 {
  this.adaptee = adaptee;
 }
 public void Request()
 {
  adaptee.SpecificRequest();
 }
  public void SpecificRequest()
 {
  target.Request();
 }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值