米鼠商城

多快好省,买软件就上米鼠网

最新项目

人才服务

靠谱的IT人才垂直招聘平台

设计模式(6) 适配器模式

  • Ellison
  • 7
  • 2020-07-13 21:45

精选30+云产品,助力企业轻松上云!>>>

  • 结构型模式
  • 适配器模式
  • 类适配器和对象适配器

结构型模式

结构型模式的重点在于如何通过灵活的体系组织不同的对象,并在此基础上完成更为复杂的类型(或者类型系统),而参与组合的各类型之间始终保持尽量松散的结构关系。 结构型模式包括以下几种:

  • 适配器模式
  • 桥接模式
  • 组合模式
  • 装饰模式
  • 外观模式
  • 享元模式
  • 代理模式

适配器模式

GOF对适配器模式的描述为: Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.. — Design Patterns : Elements of Reusable Object-Oriented Software

使用适配器模式主要有两个方面的目的:

  • 旧接口在新的环境下不兼容时,借助适配器模式完成从旧接口到新接口的转换。
  • 将“既有系统”进行封装,逻辑上客户程序不知道“既有系统”的存在,将变化隔离在Adapter部分。如果客户程序需要迁移,仅需要在Adapter部分做修改。

类适配器和对象适配器

适配器的实现一般有两种方式:

  • 类适配器,通过继承让适配器类具有既有类型的特点,同时也可以根据客户程序的需要,满足新接口的需要
  • 对象适配器,在适配器里保存一个既有类型的引用,它自身按照客户程序的要求,实现新接口。

定义ITarget和Adaptee

public interface ITarget
{
    void Request();
}
public class Adaptee
{
    public void SpecifiedRequest() { }
}

类适配器

public class ObjectAdapter : Adaptee, ITarget
{
    public void Request()
    {
        //其他处理
        //...
        base.SpecifiedRequest();
        //...
    }
}

对象适配器

public class ClassAdapter : ITarget
{
    private Adaptee adaptee;

    public void Request()
    {        
        //其他处理
        //...
        adaptee.SpecifiedRequest();
        //...
    }
}

两者的区别有: | 类适配器 | 对象适配器 | | - | - | | 基于继承概念 | 基于对象组合的思路 | | 适配器之前不能继承自其他类、 Target只能是接口形式的ITarget | Target可能是ITarget(接口), TargetRase(抽象类),甚至是实体类,只要Adapter满足不继承两个或两个以上类的限制即可 | | 可以覆盖 Adaptee的某些方法 | 无法覆盖 Adaptee的方法 | | 虽然不可以适配子类,但可以通过覆盖修改某些方法,部分情况下可以达到配子类同样的效果 | 不仅可以适配 Adaptee,还可以适配 Adaptee的任何子类 |

类适配器和对象适配器最大的区别在于对既有类型的使用上,在扩展新功能的时候,前者使用了继承,后者使用组合的方式。对象适配器相对而言是被推荐的方式,因为使用组合带来的耦合往往比继承更松散。

对象适配器的UML类图为:

所以适配器模式主要包括三个角色:

  • Target(ITarget):调用端所期待的接口;
  • Adaptee:需要被适配的类型;
  • Adapter:适配器,完成从Adaptee到Target的转换。

适配器模式是一种相对简单,而且使用广泛的模式,在需要实现接口间的兼容、隔离变化的时候,是一种很好的选择。

参考书籍: 王翔著 《设计模式——基于C#的工程化实现及扩展》



这里给大家推荐一个在线软件复杂项交易平台:米鼠网 https://www.misuland.com

米鼠网自成立以来一直专注于从事软件项目人才招聘软件商城等,始终秉承“专业的服务,易用的产品”的经营理念,以“提供高品质的服务、满足客户的需求、携手共创双赢”为企业目标,为中国境内企业提供国际化、专业化、个性化、的软件项目解决方案,我司拥有一流的项目经理团队,具备过硬的软件项目设计和实施能力,为全国不同行业客户提供优质的产品和服务,得到了客户的广泛赞誉。



如有侵权请联系邮箱(service@misuland.com)

猜你喜欢

评论留言