跟着实例学习设计模式(8)-适配器模式adapter(结构型)

适配器模式属于结构型设计模式

设计意图:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

该模式正如名字一样适配器,就是为了能使之前的老接口可以焕发青春的模式,使用一个新的接口把已经存在的接口发布出去。

这样的设计模式,我们一版在企业信息化升级时会经常使用,有些企业存在的老接口经常不能对外接收数据,而重构又成本太高,那就只能使用适配器模式了,将老接口重新包装发布。

当然也有设计时就会使用的时候,大家可能不相信,不过我还真的经历过。

我们曾经为了适配中国移动ADC管理平台的接口就使用了适配器模式,那个接口也够奇葩的,ADC管理平台由六大厂家提供,每个厂家的接口和参数均不相同,可想而之,我们为了兼容六大平台厂家,在设计之初就把处理不同厂家的数据接口使用适配器模式设计,保证转换后的数据在我们系统中是一种数据结构,这样大大减少了我们的代码工作量。

这次就不上代码了,相信大家都能理解适配器模式!

总结:

        适配器模式是一中亡羊补牢的模式,我们希望尽量不要使用这种设计模式来解决我们的问题,因为如果用到它说明我们的系统可能过时了或是之前的设计不好又没有及时重构以至于不得不使用适配器模式给外部系统提供接口。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
结构型模式应用: 结构型设计模式是指通过组合类或对象来实现更大的结构,以解决系统中的问题。下面是关于结构型设计模式的基本概念、基本原理、种类及用途、应用场景以及设计关于结构型设计模式实例的介绍。 1. 结构型设计模式的基本概念、基本原理 结构型设计模式是指通过组合类或对象来实现更大的结构,以解决系统中的问题。它主要包括以下三个方面的内容: - 类的组合:通过继承或实现接口来组合类,以实现更大的结构。 - 对象的组合:通过对象的组合来实现更大的结构。 - 接口的组合:通过接口的组合来实现更大的结构。 2. 结构型设计模式的种类及用途 结构型设计模式主要包括以下七种: - 适配器模式:将一个类的接口转换成客户希望的另外一个接口。 - 桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 - 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。 - 装饰器模式:动态地给一个对象添加一些额外的职责。 - 外观模式:为子系统中的一组接口提供一个一致的界面。 - 享元模式:运用共享技术来有效地支持大量细粒度的对象。 - 代理模式:为其他对象提供一种代理以控制对这个对象的访问。 3. 结构型设计模式的应用场景 结构型设计模式的应用场景主要包括以下几个方面: - 当需要使用一个已经存在的类,但是它的接口不符合要求时,可以使用适配器模式。 - 当需要抽象化一个对象的行为时,可以使用桥接模式。 - 当需要表示“部分-整体”的层次结构时,可以使用组合模式。 - 当需要动态地给一个对象添加一些额外的职责时,可以使用装饰器模式。 - 当需要为子系统中的一组接口提供一个一致的界面时,可以使用外观模式。 - 当需要支持大量细粒度的对象时,可以使用享元模式。 - 当需要控制对一个对象的访问时,可以使用代理模式。 4. 设计关于结构型设计模式实例 下面是一个关于结构型设计模式实例,它主要包括以下四个方面的内容: - 实例功能:实现一个简单的图形界面,包括按钮、文本框、标签等控件。 - 所涉及的设计模式:外观模式、装饰器模式、适配器模式。 - 类图如下所示: ``` +----------------+ +----------------+ +----------------+ | Button | | TextField | | Label | +----------------+ +----------------+ +----------------+ | onClick() | | onInput() | | | +----------------+ +----------------+ +----------------+ | | | | | | +-------------------------+-------------------------+ | | +----------------+ | Facade | +----------------+ | drawUI() | +----------------+ | | +----------------+ | Decorator | +----------------+ | addBorder() | +----------------+ | | +----------------+ | Adapter | +----------------+ | onEvent() | +----------------+ ``` - C#代码实现如下所示: ```csharp // 按钮类 public class Button { public void onClick() { Console.WriteLine("Button clicked."); } } // 文本框类 public class TextField { public void onInput() { Console.WriteLine("Text input."); } } // 标签类 public class Label { public void show() { Console.WriteLine("Label shown."); } } // 外观类 public class Facade { private Button button; private TextField textField; private Label label; public Facade() { button = new Button(); textField = new TextField(); label = new Label(); } public void drawUI() { button.onClick(); textField.onInput(); label.show(); } } // 装饰器类 public class Decorator { public void addBorder() { Console.WriteLine("Border added."); } } // 适配器类 public class Adapter { private Button button; public Adapter(Button button) { this.button = button; } public void onEvent() { button.onClick(); } } // 测试代码 class Program { static void Main(string[] args) { // 外观模式 Facade facade = new Facade(); facade.drawUI(); // 装饰器模式 Decorator decorator = new Decorator(); decorator.addBorder(); // 适配器模式 Button button = new Button(); Adapter adapter = new Adapter(button); adapter.onEvent(); } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值