结合项目实例 回顾传统设计模式(七)适配器模式(附外观模式)

简介:

记得以前章节谈过的装饰者模式,我们将对象包装起来,赋予他们新的职责。而现在则是以不同目的,包装某些对象:让他们的接口看起来不像自己而像是别的东西。这样就可以在设计中,将类的接口转换成想要的接口,以便实现不同的接口。

在项目中,适配器模式一般扮演者协调者的作用。

1.客户通过目标接口调用适配器的方法对适配器发出请求

2.适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口

3.客户接受到调用的结果,但并未察觉这一切是适配器在起转换作用

另外还有一种特殊情况,万一系统新旧并存,旧的部分期望旧的厂商接口,但我们却已经使用新厂商的接口编写了这一部分,这个时候该怎么办?这里使用适配器,那里却使用未包装的接口,这实在让人感到混乱。这种情况需要创建一个双向的适配器,支持两边的接口。

关于这一节的项目 咱们就选银行支付驱动

///   <summary>
    
///  支付驱动
    
///   </summary>
     public  interface PayChannelDriver
    {
         void PayCallBack();

         string ReplaceHtmlCode( string order_no,  string order_create_time, string currency,  string extra,  string goods_desc);
       
    }

     ///   <summary>
    
///  银行支付驱动
    
///   </summary>
     public  class CMBPayChannelDriver : PayChannelDriver
    {
         public  void PayCallBack()
        {
            Console.WriteLine( " this is CMBPayChannelDriver ");
        }

         public  string ReplaceHtmlCode( string order_no,  string order_create_time,  string currency,  string extra,  string goods_desc)
        {
             return  "";
        }
    }

     ///   <summary>
    
///  第三方支付驱动
    
///   </summary>
     public  class OtherPayChannelDriver 
    {
         public  void OtherPayCallBack()
        {
            Console.WriteLine( " this is OtherPayChannelDriver ");
        }

         public  string GetReuqestUrl( string order_no,  string order_create_time,  string goods_desc)
        {
             return  "";
        }
    }

     ///   <summary>
    
///  适配器
    
///   </summary>
     public  class PayChannelDriverAdapter : PayChannelDriver
    {
        OtherPayChannelDriver ocd;
         public PayChannelDriverAdapter(OtherPayChannelDriver otherpcd)
        {
             this.ocd = otherpcd;
        }
         public  void PayCallBack()
        {
            ocd.OtherPayCallBack();
        }
         public  string ReplaceHtmlCode( string order_no,  string order_create_time, string currency,  string extra,  string goods_desc)
        {
             return ocd.GetReuqestUrl(order_no, order_create_time,goods_desc);
        }
 
    }

 

测试看看

           // 普通银行驱动
           PayChannelDriver pd =  new CMBPayChannelDriver();
            // 第三方支付不支持银行驱动
           OtherPayChannelDriver od =  new OtherPayChannelDriver();
            // 适配器
           PayChannelDriver apd =  new PayChannelDriverAdapter(od);
            // 驱动支持适配器
           pd.PayCallBack();
           apd.PayCallBack();

 

总结:适配器模式将一个类的接口转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

设计原则: 当你正在设计一个系统,不管是任何对象,你都要注意它所交互的类有哪些,并注意它和这些类是如何交互的。不要让太多的类耦合在一起,免得修改系统中一部分,会影响到其他部分。如果许多类之间相互依赖,那么这个系统就会变成一个易碎的系统,它需要花许多成本维护,也会因为太复杂而不容易被其他人了解。

下面我们再看看外观模式

在适配器模式中一个适配器只能够封装一个类吗?适配器模式的工作是将一个借口转换成另一个。虽然大多数的适配器模式所采取的例子都是让一个适配器包装一个被适配者,但我们都知道这个世界其实复杂多了,需要让一个适配器包装多个被适配者。这就涉及到外观模式。

外观模式提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。实例的话就不再赘述了。

总得来说 外观模式基于适配器模式让接口变得更简单。



本文转自 熬夜的虫子  51CTO博客,原文链接:http://blog.51cto.com/dubing/712412

相关文章
|
设计模式 算法 数据库连接
PHP中的设计模式:提高代码的可维护性与扩展性本文旨在探讨PHP中常见的设计模式及其应用,帮助开发者编写出更加灵活、可维护和易于扩展的代码。通过深入浅出的解释和实例演示,我们将了解如何使用设计模式解决实际开发中的问题,并提升代码质量。
在软件开发过程中,设计模式是一套经过验证的解决方案模板,用于处理常见的软件设计问题。PHP作为流行的服务器端脚本语言,也有其特定的设计模式应用。本文将重点介绍几种PHP中常用的设计模式,包括单例模式、工厂模式和策略模式,并通过实际代码示例展示它们的具体用法。同时,我们还将讨论如何在实际项目中合理选择和应用这些设计模式,以提升代码的可维护性和扩展性。
265 4
|
10月前
|
设计模式 前端开发 Java
【设计模式】【结构型模式】适配器模式(Adpter)
一、入门 什么是适配器模式? 适配器模式是Java中常用的结构型设计模式,它的核心作用就像现实中的电源转换器一样---让原本不兼容的两个接口能够协同工作。 为什么要用适配器模式? 假设我们需要在电商系
258 10
|
10月前
|
设计模式 Java 数据库连接
【设计模式】【结构型模式】外观模式(Facde)
一、入门 什么是外观模式? 一种结构型设计模式,通过为子系统中的一组接口提供一个统一的高层接口(称为外观),来简化客户端与复杂子系统的交互过程。其本质是建立抽象层来隔离复杂度。 为什么要有外观模式?
377 9
|
设计模式 缓存 应用服务中间件
「全网最细 + 实战源码案例」设计模式——外观模式
外观模式(Facade Pattern)是一种结构型设计模式,旨在为复杂的子系统提供一个统一且简化的接口。通过封装多个子系统的复杂性,外观模式使外部调用更加简单、易用。例如,在智能家居系统中,外观类可以同时控制空调、灯光和电视的开关,而用户只需发出一个指令即可。
330 69
|
设计模式 Java 开发者
「全网最细 + 实战源码案例」设计模式——适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,通过引入适配器类将一个类的接口转换为客户端期望的另一个接口,使原本因接口不兼容而无法协作的类能够协同工作。适配器模式分为类适配器和对象适配器两种,前者通过多重继承实现,后者通过组合方式实现,更常用。该模式适用于遗留系统改造、接口转换和第三方库集成等场景,能提高代码复用性和灵活性,但也可能增加代码复杂性和性能开销。
551 28
|
设计模式 JSON 前端开发
前端必须掌握的设计模式——适配器模式
适配器模式是一种结构型设计模式,用于使接口不兼容的对象能够相互合作。通过在客户端和系统之间引入一个“中间层”适配器,将不同类型的输入数据转换为系统能处理的标准格式,减轻系统的负担,提高扩展性和可维护性。例如,MacBook的扩展坞将多种接口(如HDMI、USB)转换为Type-C接口,实现多接口兼容。
|
设计模式 存储 Java
【九】设计模式~~~结构型模式~~~外观模式(Java)
文章详细介绍了外观模式(Facade Pattern),这是一种对象结构型模式,通过引入一个外观类来简化客户端与多个子系统之间的交互,降低系统的耦合度,并提供一个统一的高层接口来使用子系统。通过文件加密模块的实例,展示了外观模式的动机、定义、结构、优点、缺点以及适用场景,并讨论了如何通过引入抽象外观类来提高系统的可扩展性。
【九】设计模式~~~结构型模式~~~外观模式(Java)
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。
|
设计模式 数据库连接 PHP
PHP中的设计模式:如何提高代码的可维护性与扩展性在软件开发领域,PHP 是一种广泛使用的服务器端脚本语言。随着项目规模的扩大和复杂性的增加,保持代码的可维护性和可扩展性变得越来越重要。本文将探讨 PHP 中的设计模式,并通过实例展示如何应用这些模式来提高代码质量。
设计模式是经过验证的解决软件设计问题的方法。它们不是具体的代码,而是一种编码和设计经验的总结。在PHP开发中,合理地使用设计模式可以显著提高代码的可维护性、复用性和扩展性。本文将介绍几种常见的设计模式,包括单例模式、工厂模式和观察者模式,并通过具体的例子展示如何在PHP项目中应用这些模式。
|
设计模式 Java 程序员
Java设计模式-适配器模式(8)
Java设计模式-适配器模式(8)
137 2

热门文章

最新文章