适配器模式

namespace DemoSocket
{
/// <summary>
/// 适配器必须实现原有的旧接口,适配器对象中持有对新接口的引用,当调用旧接口时,将这个调用委托给
/// 实现新接口的对象来处理,也就是在适配器对象中组合一个新接口
/// </summary>
class SocketAdapter : IDbSocketInterface //实现旧接口
{
//组合新接口
private readonly IGbSocketInterface _gbSocket;
/// <summary>
/// 在创建适配器对象时,必须传入一个新接口的实现类
/// </summary>
/// <param name="gbSocket"></param>
public SocketAdapter(IGbSocketInterface gbSocket)
{
_gbSocket = gbSocket;
}
/// <summary>
/// 将对旧接口的调用适配到新接口
/// </summary>
public void PowerWithTwoRound()
{
_gbSocket.PowerWithThreeFlat();
}
}
}

namespace DemoSocket
{
public interface IDbSocketInterface
{
void PowerWithTwoRound();
}
}

namespace DemoSocket
{
public interface IGbSocketInterface
{
void PowerWithThreeFlat();
}
}


namespace DemoSocket
{
public class DbSocket : IDbSocketInterface
{
public void PowerWithTwoRound()
{
Console.WriteLine("使用两项圆头的插孔供电");
}
}
}

{
public class GbSocket :IGbSocketInterface
{
public void PowerWithThreeFlat()
{
Console.WriteLine("使用三项扁头插孔充电");
}
}
}


namespace DemoSocket
{
public class Hotel
{
private IDbSocketInterface _dbSocket;
public Hotel(){}
public Hotel(IDbSocketInterface dbSocket)
{
this._dbSocket = dbSocket;
}
public void SetSocket(IDbSocketInterface dbSocket)
{
this._dbSocket = dbSocket;
}
public void Charge()
{
_dbSocket.PowerWithTwoRound();
}
}
}

namespace DemoSocket
{
class Program
{
static void Main(string[] args)
{
IGbSocketInterface gbSocket = new GbSocket();
var socketAdaper = new SocketAdapter(gbSocket);
var hotel = new Hotel();
hotel.SetSocket(socketAdaper);
hotel.Charge();
Console.ReadKey();
}
}
}

原文地址:https://www.cnblogs.com/gylhaut/p/5441849.html