zoukankan      html  css  js  c++  java
  • 适配器设计模式

     

    适配器设计模式是把一个类的接口转化成客户端期望的接口,从而使原本接口不匹配的两个类能一起工作。

    实际中这种场景很容易碰到,比如A类型手机充电器需要10V电压充电,B类型手机需要15V电压充电。A类型手机的充电器价格非常昂贵,而B类型的充电器价格低廉。市场就有可能出现把B型充电器转换成A型手机匹配的适配器。

    适配器设计模式有两种:

    类适配器:使用继承实现接口转换。

    实例适配器:使用组合实现接口转换。

    类适配器

    类图:
    类适配器设计的角色:

    源:被适配的类。

    目标:客户期望的接口.由于适配器需要继承源。所以目标必须是接口。

    适配器:把源接口转换成目标接口。适配器需要继承源。

    代码:

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    namespace Hbb0b0.DesignPatter

    {

    /// <summary>

    /// 源:被适配者

    /// </summary>

    public class Adaptee

    {

    /// <summary>

    /// 响应特殊的请求

    /// </summary>

    public void SpecialRequest()

    {

    Console.WriteLine("Call SpecialRequest");

    }

    }

    /// <summary>

    /// 目标:客户端期望的接口。必须是接口

    /// </summary>

    public interface ITarget

    {

    /// <summary>

    /// 客户端期望的响应请求方法

    /// </summary>

    void Request();

    }

    /// <summary>

    /// 适配器

    /// </summary>

    public class ClassAdapter : Adaptee,ITarget

    {

    #region ITarget 成员

    /// <summary>

    /// 实现期望的接口

    /// </summary>

    public void Request()

    {

    base.SpecialRequest();

    }

    #endregion

    }

    }

    调用示例:

    //类适配器

    Console.WriteLine("类适配器");

    ITarget iTarget = new ClassAdapter();

    iTarget.Request();

    实例适配器

    类图
    实例适配器设计的角色:

    源:被适配的类。

    目标:客户期望的接口.由于适配器中包装源。所以目标可以是类,抽象类,接口。

    适配器:把源接口转换成目标接口。适配器包装源。

    代码:

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    namespace Hbb0b0.DesignPatter

    {

    /// <summary>

    /// 源:被适配者

    /// </summary>

    public class Adaptee

    {

    /// <summary>

    /// 响应特殊的请求

    /// </summary>

    public void SpecialRequest()

    {

    Console.WriteLine("Call SpecialRequest");

    }

    }

    /// <summary>

    /// 目标:客户端可以期望接口,可以是具体类也可以是抽象类,

    /// 也可以是接口

    /// </summary>

    public class Target

    {

    /// <summary>

    /// 期望的方法

    /// </summary>

    virtual public void Request()

    {

    }

    }

    }

    /// <summary>

    /// 适配器:内部包装源,把源接口转换成目标接口

    /// </summary>

    public class InstanceAdapter : Target

    {

    private Adaptee adaptee = null;

    public InstanceAdapter(Adaptee adt )

    {

    adaptee = adt;

    }

    public override void Request()

    {

    adaptee.SpecialRequest();

    }

    }

    }

    调用示例:

    //对象适配器

    Console.WriteLine("对象适配器");

    Adaptee adt=new Adaptee ();

    Target target = new InstanceAdapter(adt );

    target.Request();

  • 相关阅读:
    Luogu P3275 糖果
    Python基础学习
    SharePoint 2013
    Office
    KnockoutJS
    SharePoint 2013
    Bootstrap
    SharePoint 2013
    CSS
    AngularJS
  • 原文地址:https://www.cnblogs.com/hbb0b0/p/1950842.html
Copyright © 2011-2022 走看看