标签:style class blog code java http
小刚被提拔为班长了,以后可以跟学习委员小红光明正大的交往了,哈哈想想就心里美得很,可是问题页随之而来,经常有好几个老师同时找小刚去帮忙,这可怎么办;情急之下小刚不得不去请教老班长小明,看在两个冰激凌的份上小明答应帮他,“你不是班长么?有任务何必自己上呢?”一时间小刚恍然大悟,看来思想的转变才是最重要的啊。
我们定义一个IStudent接口,抽象出各种任务
public interface IStudent { //擦黑板 void CleanBoard(); //提水 void LiftWater(); //辅导 void Tutor(); }
接着定义实体类定义具体的实现方法
public class Student:IStudent { public void CleanBoard() { Console.WriteLine("擦黑板"); } public void LiftWater() { Console.WriteLine("帮老奶奶提水"); } public void Tutor() { Console.WriteLine("辅导功课");
}
定义小刚班长,作为具体执行人员的代理者
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(); } }
供client端Teacher调用
class Teacher { static void Main(string[] args) { XiaoGang xiaogang = new XiaoGang(); xiaogang.LiftWater(); xiaogang.CleanBoard(); xiaogang.Tutor(); } }
怎么有一种脱了裤子放屁的感觉,明显多此一举么,如此简单的功能搞得那么复杂。。。。
1.创建一个webservice应用,添加一个web服务,命名为SqlWebservice,写一个方法模拟从数据库根据给定条件取出相应数据返回一个字符串,此处简化了操作仅供演示
[WebMethod] public string SqlSearch() { return "查询到10条数据"; }
2.新建控制台应用项目,添加对此webservice的引用,命名为SqlHelper
3.新建代理类,提供对此webservice的代理
class Proxy { public static string SqlSearch() { //创建webservicesoapclient实例 SqlHelper.SqlWebserviceSoapClient client = new SqlHelper.SqlWebserviceSoapClient(); //调用服务方法 return client.SqlSearch(); } }
4.客户端通过代理类调用获取信息
class Program { static void Main(string[] args) { //直接使用代理获取相关信息,具体的查询操作由代理完成,客户端不关心数据的来源 string str = Proxy.SqlSearch(); Console.Write(str); } }
代理模式常用表现形式
远程代理:如webservice,本地通过网络调用远程web引用
虚拟代理:常见的延迟加载,如图片的加载等,在需要显示的时候才加载出来
Copy-on-Write代理:把此操作延迟到需要时才创建
智能引用(Smart Reference)代理:当一个对象被引用时,提供一些额外的操作,比如将对此对象调用的次数记录下来等。
引用:
http://www.cnblogs.com/rush/archive/2011/06/19/2084775.html
标签:style class blog code java http
原文地址:http://www.cnblogs.com/justforcoding/p/3772843.html