C#设计模式:18.适配器模式 u3d学习总结笔记本

适配器模式(Adapter Pattern)

把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。

其实这个设计模式的名字,已经把他的功能说明的很清楚了,就是将不同接口的类,运用适配器,使得可以使用同一接口统一调用。

适配器可以是抽象类,并适配器模式的实现是非常灵活的,我们完全可以将Adapter模式中的“现存对象”作为新的接口方法参数,适配器类可以根据参数参数可以返回一个合适的实例给客户端。类的适配器模式是定义一个接口来实现客户端想要的方法,并在适配器类中继承这个接口和源角色。对象的适配器模式是在适配器类中继承要适配的类并声明一个源角色的对象,通过重写调用基类的方法来实现。

使用场景:

  1. 系统需要复用现有类,而该类的接口不符合系统的需求
  2. 想要建立一个可重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
  3. 对于对象适配器模式,在设计里需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。

优点:

  • 可以在不修改原有代码的基础上来复用现有类,很好地符合 “开闭原则”(这点是两种实现方式都具有的)
  • 采用 “对象组合”的方式,更符合低耦合。

缺点:

  • 使得重定义Adaptee的行为较困难,这就需要生成Adaptee的子类并且使得Adapter引用这个子类而不是引用Adaptee本身。

原功能类:

//原程序功能类
class Target
{
    public virtual void Request()
    {
        Debug.Log("原功能的请求");
    }
}

新功能类:

//需要适配的新功能类
class NewTarget
{
    public void NewRequest()
    {
        Debug.Log("新功能的请求");
    }
}

适配器类:

//适配器:继承重写调用新类的功能
class Adapter : Target
{
    NewTarget adaptee = new NewTarget();

    public override void Request()//重写方法
    {
        adaptee.NewRequest();
    }
}

运行测试:

void Start()
{

    Target target = new Target();//生成原功能类

    target.Request();//调用功能

    target = new Adapter();//生成原功能类的适配器

    target.Request();//调用功能

}

结果:

猜你喜欢

转载自blog.csdn.net/qq_40346899/article/details/109262936