动机:在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者或者系统结构带来很多麻烦。如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。
应用:远程对象访问、Copy-On-Write
场景:为了使操作ThinkPad对应用程序透明,隔离硬件操作的复杂性,在应用程序和ThinkPad中间置入一代理层(相当于操作系统),此代理通过向应用程序提供一致的API,实现对硬件的操作。
结构
代码实现
要点:
1、在面向对象系统中,直接使用某些对象会带来带很多问题,作为间接层的代理对象是解决这一问题的常用手段。
2、该模式在具体使用的时候,实现方法、粒度都相差很大。有些可能对单个对象做细粒度的控制,如Copy-On-Write技术,有些可能对组件模块提供抽象代理层,在架构层次对对象做代理。
3、该模式并不要求保持接口一致,只要能够实现间接控制,有时损失一些透明性是可以接受的。
应用:远程对象访问、Copy-On-Write
场景:为了使操作ThinkPad对应用程序透明,隔离硬件操作的复杂性,在应用程序和ThinkPad中间置入一代理层(相当于操作系统),此代理通过向应用程序提供一致的API,实现对硬件的操作。
结构
代码实现
namespace DesignPattern.Proxy
{
public interface IThinkPad
{
void Start();
void Operate();
void Shutdown();
}
/// <summary>
/// 实体,实现ThinkPad操作
/// </summary>
public class ThinkPad : IThinkPad
{
public void Start()
{
}
public void Operate()
{
}
public void Shutdown()
{
}
}
/// <summary>
/// 代理,能供应用程序调用,实现对ThinkPad的操作
/// </summary>
public class ThinkPadProxy : IThinkPad
{
IThinkPad thinkPad;
public ThinkPadProxy(IThinkPad thinkPad)
{
this.thinkPad = thinkPad;
}
public void Start()
{
// .
thinkPad.Start();
// .
}
public void Operate()
{
// .
thinkPad.Operate();
// .
}
public void Shutdown()
{
// .
thinkPad.Shutdown();
// .
}
}
}
{
public interface IThinkPad
{
void Start();
void Operate();
void Shutdown();
}
/// <summary>
/// 实体,实现ThinkPad操作
/// </summary>
public class ThinkPad : IThinkPad
{
public void Start()
{
}
public void Operate()
{
}
public void Shutdown()
{
}
}
/// <summary>
/// 代理,能供应用程序调用,实现对ThinkPad的操作
/// </summary>
public class ThinkPadProxy : IThinkPad
{
IThinkPad thinkPad;
public ThinkPadProxy(IThinkPad thinkPad)
{
this.thinkPad = thinkPad;
}
public void Start()
{
// .
thinkPad.Start();
// .
}
public void Operate()
{
// .
thinkPad.Operate();
// .
}
public void Shutdown()
{
// .
thinkPad.Shutdown();
// .
}
}
}
namespace DesignPattern.Proxy
{
public class Application
{
IThinkPad thinkPad = new ThinkPadProxy(new ThinkPad());
public void StartThinkPad()
{
thinkPad.Start();
}
public void OperateThinkPad()
{
thinkPad.Operate();
}
public void ShutdownThinkPad()
{
thinkPad.Shutdown();
}
}
}
{
public class Application
{
IThinkPad thinkPad = new ThinkPadProxy(new ThinkPad());
public void StartThinkPad()
{
thinkPad.Start();
}
public void OperateThinkPad()
{
thinkPad.Operate();
}
public void ShutdownThinkPad()
{
thinkPad.Shutdown();
}
}
}
要点:
1、在面向对象系统中,直接使用某些对象会带来带很多问题,作为间接层的代理对象是解决这一问题的常用手段。
2、该模式在具体使用的时候,实现方法、粒度都相差很大。有些可能对单个对象做细粒度的控制,如Copy-On-Write技术,有些可能对组件模块提供抽象代理层,在架构层次对对象做代理。
3、该模式并不要求保持接口一致,只要能够实现间接控制,有时损失一些透明性是可以接受的。
欢迎光临我的淘宝http://shop35795100.taobao.com,专营游戏点卡、电话卡及各类充值卡。