软考中的设计模式

       在软考之前,对设计模式的理解只是停留在概念的层面上,通过这次系统的复习, 更加深刻的认识了设计模式。

考试前几天我们小组又串了一遍设计模式,总结了一些需要注意的点:

1.看类图

       软考刚开始的时候做设计模式,觉得不需要看类图,根据前后代码就可以填空,直到最后才发现类图才是设计模式的核心。

       拿到一个设计模式后,先看一下概念,接下来看的就是类图,图中有哪些抽象类,接口,具体类,类与类,类与接口有什么对应关系。

        抽象(abstract)类(class

        接口(interface)

2.找关系

       关系是转换成代码的关键,在类图中常见的关系有泛化,实现,关联(聚合,组合),依赖(在大话中有依赖和关联有明显的区分,在HeadFirst中都是用关联来体现的)。

       从最简单的开始说起,泛化(也就是继承,只是看问题的角度不同),体现的是抽象类与具体类的关系,代码体现为:“具体类 extends 抽象类”

       实现:一般为类与接口的关系,代码体现为:“类 implements 接口”。

       ……

       曾经专门介绍过UML类图中的关系,就不一一介绍了。

3.图和代码的转换

        最重要的一步就是将图转换成代码,因为写对了,就拿分了。


下面通过我们熟悉的组合模式来讲一讲分析思路。

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

       这么看定义也很难理解,下面继续分析

       看类图


       在这张图中,我们可以看到有Component抽象类,Leaf和Composite两个具体类,还有一个客户端用来实现对设计模式的调用。具体类Leaf和Composite继承了抽象类,Composite由Component聚合而成(个人认为这里聚合的真正对象是Leaf,因为抽象类是不能被实例化的)。

       找到了类和关系后,我们就来实现代码和图的转换:

首先是继承关系


       我们可以看到抽象类的表示方法为abstract class Compmonent,在抽象类中的方法,可以是抽象的,也可以是具体的,如果是抽象方法的话,在子类中必须重写抽象方法。

       在这里也体现了构造函数的概念,个人理解重载和构造函数密不可分。这些是面向对象的具体知识,接下来会一一介绍。


        在.net中子类继承父类,继承用“:”来表示,在Java中则用extends代替,这也就是.net和Java的不同之处。同样,实现接口在.net中也用“:”来表示,在Java中则用implements。

       在子类Leaf中,也体现了对抽象方法的重写,简单的说,重写就是对方法内具体内容的重新编写。

接下来我们看聚合关系

Composite类


一般情况下,聚合关系是一种一对多的关系,所以在一的类中声明集合来存放聚合的类,体现了聚合关系。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 38
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值