.NET乐园
一个梦想,一个行动…… (欢迎光临我的淘宝http://pipis.taobao.com,专营户外手电筒、头灯、营地灯、自行车灯)
动机:在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者或者系统结构带来很多麻烦。如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。

应用:远程对象访问、Copy-On-Write

场景:为了使操作ThinkPad对应用程序透明,隔离硬件操作的复杂性,在应用程序和ThinkPad中间置入一代理层(相当于操作系统),此代理通过向应用程序提供一致的API,实现对硬件的操作。


结构
Proxy模式结构图

代码实现

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();
            
// .
        }

    }

}

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();
        }

    }

}


要点
1、在面向对象系统中,直接使用某些对象会带来带很多问题,作为间接层的代理对象是解决这一问题的常用手段。
2、该模式在具体使用的时候,实现方法、粒度都相差很大。有些可能对单个对象做细粒度的控制,如Copy-On-Write技术,有些可能对组件模块提供抽象代理层,在架构层次对对象做代理。
3、该模式并不要求保持接口一致,只要能够实现间接控制,有时损失一些透明性是可以接受的。
posted on 2007-06-19 08:55  Charly  阅读(543)  评论(0编辑  收藏  举报