码迷,mamicode.com
首页 > 其他好文 > 详细

代理模式

时间:2014-06-11 10:15:16      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   java   http   

小刚被提拔为班长了,以后可以跟学习委员小红光明正大的交往了,哈哈想想就心里美得很,可是问题页随之而来,经常有好几个老师同时找小刚去帮忙,这可怎么办;情急之下小刚不得不去请教老班长小明,看在两个冰激凌的份上小明答应帮他,“你不是班长么?有任务何必自己上呢?”一时间小刚恍然大悟,看来思想的转变才是最重要的啊。

我们定义一个IStudent接口,抽象出各种任务

bubuko.com,布布扣
public interface IStudent
    {
        //擦黑板
        void CleanBoard();
        //提水
        void LiftWater();
        //辅导
        void Tutor();
    }
bubuko.com,布布扣

接着定义实体类定义具体的实现方法

bubuko.com,布布扣
public class Student:IStudent
    { 
        public void CleanBoard()
        {
            Console.WriteLine("擦黑板");
        }

        public void LiftWater()
        {
            Console.WriteLine("帮老奶奶提水");
        }

        public void Tutor()
        {
            Console.WriteLine("辅导功课");
     }
bubuko.com,布布扣

定义小刚班长,作为具体执行人员的代理者

bubuko.com,布布扣
public class XiaoGang:IStudent
    {
        private IStudent student;

        public XiaoGang()
        {
            //实例化一个被代理对象
            student = new Student();
        }

        //作为代理人本人不做,由别人去做具体的事情
        public void CleanBoard()
        {
            student.CleanBoard();
        }

        public void LiftWater()
        {
            student.LiftWater();
        }

        public void Tutor()
        {
            student.Tutor();
        }
    }
bubuko.com,布布扣

供client端Teacher调用

bubuko.com,布布扣
class Teacher
    {
        static void Main(string[] args)
        {
            XiaoGang xiaogang = new XiaoGang();
            xiaogang.LiftWater();
            xiaogang.CleanBoard();
            xiaogang.Tutor();
        }
    }
bubuko.com,布布扣

怎么有一种脱了裤子放屁的感觉,明显多此一举么,如此简单的功能搞得那么复杂。。。。

代理模式经典应用之调用webservice

1.创建一个webservice应用,添加一个web服务,命名为SqlWebservice,写一个方法模拟从数据库根据给定条件取出相应数据返回一个字符串,此处简化了操作仅供演示

[WebMethod]
        public string SqlSearch()
        {
            return "查询到10条数据";
        }

2.新建控制台应用项目,添加对此webservice的引用,命名为SqlHelper

bubuko.com,布布扣

3.新建代理类,提供对此webservice的代理

bubuko.com,布布扣
class Proxy
    {
        public static string SqlSearch()
        {
            //创建webservicesoapclient实例
            SqlHelper.SqlWebserviceSoapClient client = new SqlHelper.SqlWebserviceSoapClient();
            //调用服务方法
            return client.SqlSearch();
        }
    }
bubuko.com,布布扣

4.客户端通过代理类调用获取信息

bubuko.com,布布扣
class Program
    {
        static void Main(string[] args)
        {
            //直接使用代理获取相关信息,具体的查询操作由代理完成,客户端不关心数据的来源
            string str = Proxy.SqlSearch();
            Console.Write(str);
        }
    }
bubuko.com,布布扣
这只是一个简单地webservice应用,使用此种形式代码结构更加清晰,分工更加明确,后期维护也相对比较简单。客户端完全不需关心数据时如何获取的、从哪里获取的只需代用代理一切由代理内部完成。

代理模式常用表现形式

远程代理:如webservice,本地通过网络调用远程web引用

虚拟代理:常见的延迟加载,如图片的加载等,在需要显示的时候才加载出来

Copy-on-Write代理:把此操作延迟到需要时才创建

智能引用(Smart Reference)代理:当一个对象被引用时,提供一些额外的操作,比如将对此对象调用的次数记录下来等。

 

引用:

http://www.cnblogs.com/rush/archive/2011/06/19/2084775.html

代理模式,布布扣,bubuko.com

代理模式

标签:style   class   blog   code   java   http   

原文地址:http://www.cnblogs.com/justforcoding/p/3772843.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!