设计模式——适配器模式

适配器模式主要适用于:已有一个类实现功能,但此功能已不能满足于现在客户的需求,需要进行改变,但不能修改原先的方法类。

适配器模式主要模式有两种:

  1:类适配器

  2,对象适配器

例如:

原有接口

interface DBSocketInterface
{
void powerWithTwoRound();
}

原实现接口类

class DBSocket:DBSocketInterface
{
public void powerWithTwoRound() {
Console.WriteLine("使用两项圆头的插孔供电");
}
}

一个使用原方法的实体类

class Hotel
{
private DBSocketInterface dbSocket;

public Hotel() { }

public Hotel(DBSocketInterface dbSocket)
{
this.dbSocket = dbSocket;
}

public void setSocket(DBSocketInterface dbSocket)
{
this.dbSocket = dbSocket;
}


public void charge()
{
dbSocket.powerWithTwoRound();
}
}

想要新增的功能接口

interface GBSocketInterface
{
void powerWithThreeFlat();
}

新增功能实现

class GBSocket : GBSocketInterface
{
public void powerWithThreeFlat() {
Console.WriteLine("使用三项扁头插孔供电");
}
}

如何将新功能添加到实体类中去?

这是需要建立一个适配器,将新功能添加到原先的接口中,以便于对象的使用

这是对象适配器的实现方法

class SocketAdapter : DBSocketInterface
{
private GBSocketInterface gbSocket;


public SocketAdapter(GBSocketInterface gbSocket)
{
this.gbSocket = gbSocket;
}

public void powerWithTwoRound()
{
gbSocket.powerWithThreeFlat();
}
}

在对象适配器实现过程中,需要使用到委托,将适配器中的具体实现GBSocketInterface接口的对象传入适配器中,

然后在适配器中完成对旧接口的新实现(调用外界传入对象的实现方法(GBSocketInterface ))

再调用中实现如下

GBSocketInterface gbSocket = new GBSocket();
Hotel hotel = new Hotel();

SocketAdapter socketAdapter = new SocketAdapter(gbSocket);

hotel.setSocket(socketAdapter);

hotel.charge();

类适配器的实现则是在创建类适配器是,具体的实现方法便已经写入到适配器当中,如下

class SocketAdapter2 : GBSocket, DBSocketInterface
{
public void powerWithTwoRound()
{
this.powerWithThreeFlat();
}
}

GBSocket类中便有具体的实现方法

在调用中实现如下

DBSocketInterface dbSoket = new SocketAdapter2();

Hotel hotel = new Hotel(dbSoket);

hotel.charge();

Console.ReadLine();

1    适配器对象实现原有接口
2    适配器对象组合一个实现新接口的对象(这个对象也可以不实现一个接口,只是一个单纯的对象)
3    对适配器原有接口方法的调用被委托给新接口的实例的特定方法

在https://blog.csdn.net/zhangjg_blog/article/details/18735243处学得

原文地址:https://www.cnblogs.com/cwmizlp/p/9044830.html