zoukankan      html  css  js  c++  java
  • 极速理解设计模式系列:6.适配器模式(Adapter Pattern)

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

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

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

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

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

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

     类图:

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

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

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

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

        //Target(目标抽象类角色)
    interface ITarget
    {
    void ShowInfo();
    }

            二、目标对象角色(Adapter)

        //Adapter(目标对象角色)
    public class TargetInfoAdapter:ITarget
    {
    SourceInfo sinfo;
    public TargetInfoAdapter(SourceInfo sourceinfo)
    {
    this.sinfo = sourceinfo;
    }
    public void ShowInfo()
    {
    Console.WriteLine(sinfo.Name
    + ":" + sinfo.Age + "" + sinfo.IsAdult() + " " + sinfo.NumberOfName());
    }
    }

            三、源对象角色(Adaptee)

        //Adaptee(源对象角色)
    public class SourceInfo
    {
    public string Name { get; set; }
    public int Age { get; set; }
    public string IsAdult()
    {
    return Age > 17 ? "成年" : "未成年";
    }
    public string NumberOfName()
    {
    return Name.Length.ToString() + "个字名!";
    }
    }

            四、客户端角色(Client)

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

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

  • 相关阅读:
    RMAN 高级恢复
    从问题域出发认识Hadoop生态系统
    下一代 Hadoop YARN :相比于MRv1,YARN的优势
    Sensei:分布式, 实时, 半结构化数据库
    盘点2012:云计算的春天
    Apache Tajo:一个运行在YARN上支持SQL的分布式数据仓库
    实现多个jetty实例开机后自动启动
    淘宝在数据处理领域的项目及开源产品介绍
    SenseiDB架构设计分析
    在Hadoop上运行SQL:程序员需知晓的13种数据工具
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2173195.html
Copyright © 2011-2022 走看看