• 软考四 设计模式


       软考学习到了设计模式部分了。这次主要是学习HeadFirst,跟刚开始学习大话一样,总有种豁然开朗的感觉。

      记得大话那会,总感觉作者太厉害了,讲解每个模式的时候既能从生活中的实例说起,又能给我们讲明设计模式,从生活入手,当然我们记得也就深刻了,就如说代理模式,具体可能不清楚,但是想起那个啥啥啥代人送礼物。整个过程就会出现,当然模式不想起也就起起来了。这个是大话阶段的感觉。

      那么HeadFirst呢,如果说大话那会学习的“是什么”,那么现在学习的是“为什么”,第一遍的学习只是个认识的过程,再次或者是再再次的学才是真正的学习,这也就是为什么“学而时习之,不亦说乎”的道理吧。

      我们都记得关联关系中组合和聚合不一样,一个关系强,一个关系弱,组合不可分聚合可分这些我们很早就记住了,在图中也可以区别它们的不同,但是在代码中呢?下面是我的理解:

     

    从代码说不同

    说明:一个小组中有好多个人,一个人有两只手。

    解析:小组(Group)和人(Person)是聚合关系,人和手(Hands)是组合关系。

    聚合关系:

    小组和人的关系是聚合关系,聚合关系较组合弱。

    class Group{
    
          private People people;
          
          public Group(People people){
             
                 this.people = people ;
          }
    }

     
     

    组合关系:

    人和手的关系是组合关系,组合关系较强。

    class People{
    
          private Hands hands;
    
          public People(){
    
                 hands = new Hands();
          }
    }

    解析:无论是组合关系还是聚合关系,在代码中都增加了其对应的成员变量。如Group中People类型的people,People中Hands类型的hands都成了成员变量了。

               不同的是,组合关系中hands是在People构造函数中实例化的,hands和People是同生同灭的,Group中的构造函数没有实例化People,而是使用了一个引用。也就是为什么我们说组合关系中的部分不能离开整体,聚合关系中部分离开了整体还可以单独存在。

     

        其他几种关系都有对应的代码,这里就不一一说明了,图跟代码对应关系很重要。一定不要忽视。只有弄清楚了这个,在学习设计模式的时候,才能照图写代码。

      下面再说说看图。给出我们一个图,我们一定能看出是哪个模式吗?在设计模式类图不一样的前提下是可以认出来的。但是设计模式中却存在两个类图相同的,知道是哪两个吗??  如下:

    图一:

    图二:

           图一和图二中的两个设计模式,框架结构是一样的。如果没有图中类名说明不能区别他们。可以想到既然类图都一样了,难不成模式的代码也一样吗。

        既然是两种模式,那么肯定有不同,这可上面说的一种图对应一代码实现是不矛盾的。相同的是框架结构,不同的是模式的设计思想和代码的具体实现。

        下面就比较一下这两个模式吧。

    策略模式和状态模式的比较:

        从图中很明显的可以看出他们的相同点,类图一样,那么用图对应代码的框架也是一样的。

        不同的是,策略模式封装的算法,最后只有一个算法被使用,状态模式封装的是变化,变化通过不同的状态改变。

        策略模式着重在几种算法的可替换性,算法的替换是在context中调用的,而状态模式,状态的改变则是在子状态中定义状态改变的。

        设计模式中,除了策略模式和状态模式有区别联系外,策略模式还可以和模板方法模式。

        其实,我们要学的还有很多,努力学吧。

  • 相关阅读:
    软件测试分类与分级
    项目风险管理(Project Risk Management)
    软件测试基础
    【1】开关电源纹波的抑制
    EMC小知识
    【02】STM32:跑马灯配置
    【01】STM32:GPIO管脚模式设置
    【07】Java入门07:继承与抽象类
    【06】Java入门06:IO流-基础
    【05】Java入门05:Java集合
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3400089.html
Copyright © 2020-2023  润新知