适配器模式
2013-12-22 12:52
155 查看
模式名称:适配器模式
生活场景:把电话网通过网口传送数据给笔记本,把电视网数据通过网口传送数据给笔记本电脑。
终极目标:实现多网合一。
1.不假思索的思路:获取电话网和电视网的数据信息后再传到笔记本中
2.类结构图:
代码浏览:
namespace Adapter
{
#region 网口
/// <summary>
/// 网口接口
/// </summary>
interface IInternetAccess
{
Byte[] SendInternetAccessData(); //传送网口数据
}
/// <summary>
/// 网口类
/// </summary>
class InternetAccess : IInternetAccess
{
private byte[] internetAccessData;
public Byte[] SendInternetAccessData()
{
return internetAccessData;
}
}
#endregion
#region 电话
/// <summary>
/// 电话接口
/// </summary>
interface IPOTS
{
Byte[] SendPOTSData(); //传送电话数据
}
/// <summary>
/// 电话类
/// </summary>
class POTS : IPOTS
{
private byte[] POTSData;
public byte[] SendPOTSData()
{
return POTSData;
}
}
#endregion
#region 电视
/// <summary>
/// 电视接口
/// </summary>
interface ITelevisionInterface
{
Byte[] SendTelevisionData(); //传送电视接口上的数据
}
/// <summary>
/// 电视类
/// </summary>
class TelevisionInterface : ITelevisionInterface
{
private byte[] televisionData;
public byte[] SendTelevisionData()
{
return televisionData;
}
}
#endregion
#region 笔记本电脑类
/// <summary>
/// 笔记本电脑类
/// </summary>
class Computer
{
public byte[] GetOutterFile(IInternetAccess internetAccess) //读取外部网络数据
{
return internetAccess.SendInternetAccessData(); //读取网口中的数据
}
}
#endregion
class Program
{
static void Main(string[] args)
{
Computer com = new Computer(); //笔记本电脑
InternetAccess internetAccess = new InternetAccess(); //正常网口
Byte[] data = com.GetOutterFile(internetAccess);
POTS post = new POTS(); //电话接口
Byte[] data1 = com.GetOutterFile(post); //报错
TelevisionInterface televisionInterface = new TelevisionInterface();//电视接口
Byte[] data2 = com.GetOutterFile(televisionInterface);//报错
}
}
}
存在问题:数据不兼容
2.归纳阶段
归纳步骤一
当前目标:实现数据兼容
思路:生产一个中间件,能将电话接口和网口,电视接口和网口相适应。
类结构图:
代码浏览:
#region 适配器
/// <summary>
/// 电话接口网口中间件,适配器
/// </summary>
class PAdapter : IInternetAccess
{
public PAdapter(POTS post)
{
ipost = post;
}
public byte[] SendInternetAccessData()
{
return ipost.SendPOTSData();
}
private IPOTS ipost;
}
/// <summary>
/// 电视接口网口中间件,适配器
/// </summary>
class TAdapter : IInternetAccess
{
public TAdapter(TelevisionInterface televisionInterface)
{
iTelevisionInterface = televisionInterface;
}
public byte[] SendInternetAccessData()
{
return iTelevisionInterface.SendTelevisionData();
}
private ITelevisionInterface iTelevisionInterface;
}
#endregion
class Program
{
static void Main(string[] args)
{
Computer com = new Computer(); //笔记本电脑
InternetAccess internetAccess = new InternetAccess(); //正常网口
Byte[] data = com.GetOutterFile(internetAccess);
POTS post = new POTS(); //电话接口
PAdapter pAdapter = new PAdapter(post); //中间件,适配器
Byte[] data1=com.GetOutterFile(pAdapter);
TelevisionInterface televisionInterface = new TelevisionInterface();//电视接口
TAdapter tAdapter = new TAdapter(televisionInterface); //中间件,适配器
Byte[] data2 = com.GetOutterFile(tAdapter);
}
}
设计体会:适配器很适合于解决兼容性的问题
生活场景:把电话网通过网口传送数据给笔记本,把电视网数据通过网口传送数据给笔记本电脑。
终极目标:实现多网合一。
1.不假思索的思路:获取电话网和电视网的数据信息后再传到笔记本中
2.类结构图:
代码浏览:
namespace Adapter
{
#region 网口
/// <summary>
/// 网口接口
/// </summary>
interface IInternetAccess
{
Byte[] SendInternetAccessData(); //传送网口数据
}
/// <summary>
/// 网口类
/// </summary>
class InternetAccess : IInternetAccess
{
private byte[] internetAccessData;
public Byte[] SendInternetAccessData()
{
return internetAccessData;
}
}
#endregion
#region 电话
/// <summary>
/// 电话接口
/// </summary>
interface IPOTS
{
Byte[] SendPOTSData(); //传送电话数据
}
/// <summary>
/// 电话类
/// </summary>
class POTS : IPOTS
{
private byte[] POTSData;
public byte[] SendPOTSData()
{
return POTSData;
}
}
#endregion
#region 电视
/// <summary>
/// 电视接口
/// </summary>
interface ITelevisionInterface
{
Byte[] SendTelevisionData(); //传送电视接口上的数据
}
/// <summary>
/// 电视类
/// </summary>
class TelevisionInterface : ITelevisionInterface
{
private byte[] televisionData;
public byte[] SendTelevisionData()
{
return televisionData;
}
}
#endregion
#region 笔记本电脑类
/// <summary>
/// 笔记本电脑类
/// </summary>
class Computer
{
public byte[] GetOutterFile(IInternetAccess internetAccess) //读取外部网络数据
{
return internetAccess.SendInternetAccessData(); //读取网口中的数据
}
}
#endregion
class Program
{
static void Main(string[] args)
{
Computer com = new Computer(); //笔记本电脑
InternetAccess internetAccess = new InternetAccess(); //正常网口
Byte[] data = com.GetOutterFile(internetAccess);
POTS post = new POTS(); //电话接口
Byte[] data1 = com.GetOutterFile(post); //报错
TelevisionInterface televisionInterface = new TelevisionInterface();//电视接口
Byte[] data2 = com.GetOutterFile(televisionInterface);//报错
}
}
}
存在问题:数据不兼容
2.归纳阶段
归纳步骤一
当前目标:实现数据兼容
思路:生产一个中间件,能将电话接口和网口,电视接口和网口相适应。
类结构图:
代码浏览:
#region 适配器
/// <summary>
/// 电话接口网口中间件,适配器
/// </summary>
class PAdapter : IInternetAccess
{
public PAdapter(POTS post)
{
ipost = post;
}
public byte[] SendInternetAccessData()
{
return ipost.SendPOTSData();
}
private IPOTS ipost;
}
/// <summary>
/// 电视接口网口中间件,适配器
/// </summary>
class TAdapter : IInternetAccess
{
public TAdapter(TelevisionInterface televisionInterface)
{
iTelevisionInterface = televisionInterface;
}
public byte[] SendInternetAccessData()
{
return iTelevisionInterface.SendTelevisionData();
}
private ITelevisionInterface iTelevisionInterface;
}
#endregion
class Program
{
static void Main(string[] args)
{
Computer com = new Computer(); //笔记本电脑
InternetAccess internetAccess = new InternetAccess(); //正常网口
Byte[] data = com.GetOutterFile(internetAccess);
POTS post = new POTS(); //电话接口
PAdapter pAdapter = new PAdapter(post); //中间件,适配器
Byte[] data1=com.GetOutterFile(pAdapter);
TelevisionInterface televisionInterface = new TelevisionInterface();//电视接口
TAdapter tAdapter = new TAdapter(televisionInterface); //中间件,适配器
Byte[] data2 = com.GetOutterFile(tAdapter);
}
}
设计体会:适配器很适合于解决兼容性的问题