今天介绍结构型设计模式的最后一个模式:代理模式。这种设计模式是c#在网络通信方面的一个很重要的应用。 那我们的普通应用程序界面设计为例。我们平时的应用程序在启动时的初始化过程需要初始化很多的界面对象,在有一些对象比较大的情况下再加上网络消息交互的情况下,我们的对象的初始化将是一个相对漫长的过程。可是,如此漫长的过程得来的绘制好的对象是不是都为我们所用呢,很显然有很大一部分是在初始进入界面中暂时不会用到的。那么为了减少用户的等待时间,提高界面的友好性,我们需要考虑性能优化,很显然我们会想到,把界面构建需要必须显示的部分,也就是第一眼必须要入用户眼的部分先构建出来,其余部分将等到需要时再构建。那么性能优化了,然后现有的部分就能满足用户的等待需求了吗?所以为了增加友好性,我们要先用一部分快速的提示界面提示用户,并掩盖后台的行为。待到完成后一并显示。 看个例子: 应用程序初始化时需要加载大图片,这可能需要很长时间,先拿小图片代替,待到实际使用时再显示大图片。 1.图片接口 p blic interface imager { image getimage; } 2.接口实现类 p blic class q ickimage:imager { p blic q ickimage { } #region imager members p blic system.drawing.image getimage { ret rn new bitmap("box.gif"); } #endregion }  p blic class finalimage:imager { p blic finalimage { } #region imager members p blic system.drawing.image getimage { ret rn new bitmap("box.bmp"); } #endregion } 4.代理 p blic class imageproxy { private bool _done; private timer _timer; p blic imageproxy { _timer = new timer(new timercallback(callback), this, 5000, 0); } private void callback(object obj) { _done = tr e; _timer.dispose; } p blic image getimage { imager imgaer; if (_done) { imgaer = new q ickimage; } else { imgaer = new finalimage; } imgaer.getimage; } } 5.应用 private void init { image = new imageproxy; } private void b tton1_click(object sender, eventargs e) { image.getimage; } 这种代理方法,很有用,特别是在网络设计中,要好好理解把握。