灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3103回复:0

怎样才能开发出好的软件(四)

楼主#
更多 发布于:2011-12-30 18:00

已经介绍了创建型模式,这一节就看一下结构型模式。
       首先结构型模式有:适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式。
       下面一一介绍:
适配器模式:

图片:101_3710_30c62e941026600.gif


      这个设计模式是将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。这种情况一般出现在开发后期或者维护阶段,在设计阶段还是需要把接口设计的一致的,当然使用第三方控件的时候也会考虑使用适配器模式。
桥接模式:

图片:101_3710_7ba8071a66a2280.gif



      桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立的变化。它的优点是:把多种方式的实现独立出来,让它们各自的变化,每种实现的变化都不会影响其他实现,从而达到应对变化的目的。当我们需要多角度去分类实现对象是只用继承会造成大量的类增加,不能满足开放-封闭原则时就要考虑使用桥接模式了。
组合模式:

图片:101_3710_c81edbddf1aa6ac.gif


      它将对象组合成树形结构以表示“部分-整体”的层次结构。使得用户对单个对象和组合对象的使用具有一致性。简单来说就是使用了组合模式你可以让多个公司任意隶属组合,比如我首先设立一个总公司,总公司下设立财务部、人力资源部,还有北京分公司、上海分公司,北京分公司和上海分公司下面还设立财务部和人力资源部,就是这样的一层一层的隶属关系。这样说来财务部和人力资源部都算是叶节点,具体公司算是枝节点,具体公司下可以再设置枝节点或叶节点。那什么时候使用组合模式呢?当你发现需求只用是体现部分与整体层次的结构时,以及希望用户可以忽略组合对象与单个对象的不同,统一的使用组合模式结构中的所有对象时,就应该考虑使用组合模式了。比如:ASP.net中的TreeView控件就是组合模式的应用。
装饰模式:

图片:101_3710_3cee003c1a12cea.gif


      装饰模式可以动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活。说白了装饰模式就是一层一层包装的过程,每个装饰对象只需要知道怎么包装,至于先包装哪一层是不需要知道的。它主要用在对已有功能动态的添加更多功能。
外观模式:

图片:101_3710_a991b6e6d2e0fd6.gif


       外观模式为子系统中的一组接口提供一个一致的界面,它定义了一个高层接口,这个接口使得这一子系统更加容易使用。通俗讲就是复杂的子系统提供出一个简单的接口,具体子系统内部是怎么操作的根本不需要外界知道,这样就减少了外界与这个子系统的依赖。在开发初期阶段要有意识的将两个层分离,在层与层之间建立外观。在维护一个遗留的大系统时,新的开发需求必须要依赖他,此时可以为新系统开发一个外观类,来提供设计粗糙或高度复杂的遗留代码的比较清晰的接口,让新系统与外观对象交互,外观对象与遗留代码交互所有的复杂工作。
享元模式:

图片:101_3710_8615467f4707597.gif


      享元模式是运用共享技术有效的支持大量细粒度的对象。简单来说,实例化的对象越多占用的内存也就越多,当存在大量重复的对象时,那就是资源的极大浪费,使机器性能减慢,享元模式就解决了这样的问题,让相同的对象共享同一个对象,这样就可以节约大量内存。
代理模式:

图片:101_3710_381ec5cbae3ef12.gif



      代理模式是为其他对象提供一种代理以控制对这个对象的访问。通俗讲就好像是秘书与老板,老板需要什么只需要告诉秘书,秘书负责去办老板的事,这样真正与外界打交道的是秘书,而不是老板,这样就起到了一定的隔离作用。那一般都用在什么场合呢?首先可用在远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。第二种应用是虚拟代理,是根据需要创建开销很大的对象,通过它来存放实例化很长时间的真实对象(比如说打开一个很大的HTML网页,里面可能有很多文字和图片,文字可以很快就能看到,但是图片要一张一张的下载,那些未打开的图片框就是通过虚拟代理来替代了真实的图片,此时代理存储了真实图的路径和尺寸,这样可以优化下载)。第三种是安全代理,用来控制真实对象访问时的权限,一般用于对象有不同访问权限的时候。还有一种是只能索引,当调用真实对象的时候,代理处理另外一些事

喜欢0 评分0
游客

返回顶部