設計模式學習筆記十二——Proxy模式

來源:互聯網
上載者:User
動機:在物件導向系統中,有些對象由於某種原因(比如對象建立的開銷很大,或者某些操作需要安全控制,或者需要進程外的訪問等),直接存取會給使用者或者系統結構帶來很多麻煩。如何在不失去透明操作對象的同時來管理/控制這些對象特有的複雜性?增加一層間接層是軟體開發中常見的解決方式。

應用:遠程對象訪問、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();
            // .
        }
    }
}

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、該模式並不要求保持介面一致,只要能夠實現間接控制,有時損失一些透明性是可以接受的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.