适配器模式主要适用于:已有一个类实现功能,但此功能已不能满足于现在客户的需求,需要进行改变,但不能修改原先的方法类。
适配器模式主要模式有两种:
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();
在https://blog.csdn.net/zhangjg_blog/article/details/18735243处学得