结构型模式

  

             结构型模式,顾名思义,就是对象的结构,组成,以及对象之间的依赖关系应该如何设计,此部分很重要,因为其涉及后续程序的维护性。


一、总括

                   

二、细述

    外观模式

         故事:炒股和基金

            定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

             UML

               

           用途

               1、在设计初期阶段,应该要有意识的将不同(数据访问层、业务逻辑层、表示层)的两个层分离,在层与层之间建立外观模式,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。

               2、在开发阶段,子系统往往因为不断的重构演化而变得复杂,大多数的模式使用时会产生很多小类,给外部调用他们的用户来了了使用上的困难,增加外观模式,可以提供一个简单的接口,减少他们之间的依赖。

               3、在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展,但有有很多重要的共嫩要用,这时用外观Facade类,来提供设计粗糙或高度复杂代码的比较清晰的接口,让新系统与Facade对象交互。

           与机房

               1、数据库的访问与查询等功能的分离

               2、查询的总功能和其他具体的查询功能。

               3、我做的新系统与原来的系统的功能之间的联系。


   适配器模式

      故事姚明在NBA需要翻译。

        定义将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

         UML

            

           用途

              系统的数据和行为都正确,但接口不符时,我们应该考虑适配器,目的是让控制之外的一个原有对象与某个接口匹配。应用于希望复用一些现存的类,但是接口有与复用环境要求不一致的情况。(类适配和对象适配器模式!)

    代理模式

      故事:A想追女孩,让B替他去送花等。

         定义:为其他对象提供一种代理以控制对这个对象的访问。

          UML

              

           用途

               1、远程代理,就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。

               2、虚拟代理,是根据需要创建开销很大的对象,通过他来存放实例化需要很长时间的真实对象。(就是网页中,图片的压缩版)

               3、安全代理,用来控制真实对象访问时的权限,一般用对象应该有不同的访问权限的时候

               4、智能指引,是指当调用真实的对象是,代理处理另外一些事。

          与机房

               1、远程时

               2、管理员和操作员和一般用户

        

    

   装饰模式

       故事:小菜扮靓,穿什么衣服,怎么穿,也就是给一个主体多一些功能,往上面加。

        定义:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

        UML

                        

        

         优点

             利用SetComponent来对对象进行包装,每个装饰的对象实现就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。

         用途

             是为已有功能动态的添加更多功能的一种方式,当系统中需要添加新的功能的时候,是向旧的类中添加新的代码,这些新加的代码通常装饰了原有类的核心职责或主要行为。而这些新加的东西仅仅是为了满足一些只在买某种特定情况下才会执行的特殊行为的需要。把一些装饰品放在一个个类中,来让客户端来选择要装饰哪些。

  

   享元模式

         故事:需要做多个网站,租用多个虚拟空,随着网站的增多,实例也越来越多,资源会浪费,而大家的网站共用一套代码,但数据不同,就需要用到共享代码。

         定义:运用共享技术有效的支持大量细粒度的对象。

         UML

             

       优点

          享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要生成很多细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外,其他基本都相同,有时就能减少需要实例化的类的数量。如果能把哪些参数移到类实例的外面,在方法调用时,将他们传递进来,就可以通过共享大幅度的减少单个实例的数目。

       用途

           1、如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就应该考虑使用。

           2、对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对少的共享对象取代很多的组对象,此时可以用享元模式。

 

    组合模式

       故事:一个大公司有很多分公司,而他们需要公用一套系统,也就是整体和部分需要一致对待的问题,比如word中的一个字和一段字的问题。

       定义:将对象组合成树形结构以表示‘部分-整体’的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。

       UML

           

           优点

              1、包含了分部门这些基本对象和分公司这样的组合对象的类层次结构。

              2、基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断的递归下去,客户端中,任何用到基本的对象的地方都可以使用组合对象了。

              3、让客户可以一致的使用组合结构和单个对象。


           用途

              1、透明模式:在Component中声明所有用来管理子对象的方法,其中包括Add、remove等,这样实现接口的所有子类对具备了Add和remove,这样使叶节点和枝结点对外界没有区别,具备完全一致的行为接口。但是实现叶结点是没有意义的

              2、安全方式:在Component接口中不去声明add和remove方法,那么leaf也就不需要去实现它,而是在composition声明所有用来管理子类对象的方法,但是由于树叶和树枝类将不具有相同的接口,客户端的调用需要做相应的判断,不方便。

              3、!当需求中是体现部分与整体层次的结构时,以及希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑用组合模式了。

         与机房

              组合查询


     桥接模式

         故事:手机和软件的交互。

         定义:将抽象部分与它的实现部分分离,使他们都可以独立的变化。

         UML

              

           用途

              实现系统可能有多角度分类,每一种分类都有可能变化,那么就把多角度分离出来让他们独立变化,减少他们之间的耦合。

           与机房

               可以结账,可以查询,也就是可以当做查询维护系统,也可以算工资什么的,多种功能。

 

       结构模式就是上面的外观、适配器、代理、装饰、享元、组合、桥接模式,他们均讲述了如何组合对象,如何连接他们的组合方式,希望我们可以在编程的时候可以熟练运用,其中,书上有一句话说,很多设计模式就是原则的应用而已,或许不知不觉之中,就在使用了,期待我的使用~

    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 24
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值