极速理解设计模式系列:6.适配器模式(Adapter Pattern)

简介:

四个角色:目标抽象类角色(Target)、目标对象角色(Adapter)、源对象角色(Adaptee)、客户端角色(Client)

        目标抽象类角色(Target):定义需要实现的目标接口

        目标对象角色(Adapter):调用另外一个源对象,并且转换(适配)为需要的目标对象。

        源对象角色(Adaptee):因为提供的功能不能满足现状,需要转换的源对象。

        客户端角色(Client):调用目标对象,对源对象进行加工。

         实现思路:首先取得需要转换的源对象,然后通过Adapter对源对象进行加工得到目标对象。

 类图:

        应用场景:在第三方类库中有一个源对象可以实现判断用户是否属于成人、是几个字的名字,但是需要的功能是显示用户信息,且不能更改第三方类库。

        分析:现在的系统中需要的是显示用户信息的功能,在这里我们通过适配器模式调用第三方的对象,在目标对象中显示用户信息处理,并提供接口给客户端。

        下面我们在控制台程序去演示一下如何使用Adapter Pattern:

        一、目标抽象类角色(Target)

 


 
 
  1. //Target(目标抽象类角色) 
  2. interface ITarget 
  3.     void ShowInfo(); 

        二、目标对象角色(Adapter)

 


 
 
  1. //Adapter(目标对象角色) 
  2. public class TargetInfoAdapter:ITarget 
  3.     SourceInfo sinfo; 
  4.     public TargetInfoAdapter(SourceInfo sourceinfo) 
  5.     { 
  6.         this.sinfo = sourceinfo; 
  7.     } 
  8.     public void ShowInfo() 
  9.     { 
  10.         Console.WriteLine(sinfo.Name + ":" + sinfo.Age + "岁   " + sinfo.IsAdult() + "   " + sinfo.NumberOfName()); 
  11.     } 

        三、源对象角色(Adaptee)

 


 
 
  1. //Adaptee(源对象角色) 
  2. public class SourceInfo 
  3.     public string Name { get; set; } 
  4.     public int Age { get; set; } 
  5.     public string IsAdult() 
  6.     { 
  7.         return Age > 17 ? "成年" : "未成年"
  8.     } 
  9.     public string NumberOfName() 
  10.     { 
  11.         return Name.Length.ToString() + "个字名!"
  12.     } 

        四、客户端角色(Client)

 


 
 
  1. //Client(客户端角色) 
  2. class Program 
  3.     static void Main(string[] args) 
  4.     { 
  5.         //取得源对象 
  6.         SourceInfo sinfo = new SourceInfo() { Name="小明",Age=15 }; 
  7.         //通过适配器转化源对象为目标对象。 
  8.         ITarget target =new TargetInfoAdapter(sinfo); 
  9.         target.ShowInfo(); 
  10.         Console.ReadLine(); 
  11.     } 

        如需源码请点击 AdapterPattern.rar 下载。


本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/826968


相关文章
|
10天前
|
设计模式 JSON 前端开发
前端必须掌握的设计模式——适配器模式
适配器模式是一种结构型设计模式,用于使接口不兼容的对象能够相互合作。通过在客户端和系统之间引入一个“中间层”适配器,将不同类型的输入数据转换为系统能处理的标准格式,减轻系统的负担,提高扩展性和可维护性。例如,MacBook的扩展坞将多种接口(如HDMI、USB)转换为Type-C接口,实现多接口兼容。
|
3月前
|
设计模式 Java 程序员
Java设计模式-适配器模式(8)
Java设计模式-适配器模式(8)
|
3月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
2月前
|
设计模式 Java
Java设计模式之适配器模式
这篇文章详细讲解了Java设计模式中的适配器模式,包括其应用场景、实现方式及代码示例。
58 0
|
3月前
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
4月前
|
设计模式 XML 存储
【六】设计模式~~~结构型模式~~~适配器模式(Java)
文章详细介绍了适配器模式(Adapter Pattern),这是一种结构型设计模式,用于将一个类的接口转换成客户期望的另一个接口,使原本不兼容的接口能够一起工作,提高了类的复用性和系统的灵活性。通过对象适配器和类适配器两种实现方式,展示了适配器模式的代码应用,并讨论了其优点、缺点以及适用场景。
|
5月前
|
设计模式 Go 数据处理
iLogtail设计模式问题之在iLogtail中,为何需要使用适配器模式
iLogtail设计模式问题之在iLogtail中,为何需要使用适配器模式
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
3月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
1月前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###

热门文章

最新文章