哈工大软件构造课程设计模式有感

今日在软件构造课上,我们学习了面向可复用性和可维护性的设计模式,我觉得可能对于一些应付考试的大学生来讲或许没什么用,因为我们的老师在给我们留实验的时候不会说突然改变要求,但是客户可不管这一套!他会随时更改需求,所以我们以后上班时候,有一个很好的编程模式,对于我们更改代码,满足客户的需求就会变得很容易了,下面我来表达一下我对这几种模式的理解(也还没有太理解透,请大家帮我纠错)。

首先这种设计模式大概分为三类:创建型模式、结构型模式、行为型模式。下面我会一一说一下我的理解。

首先是创建型模式,我要介绍的就是其中的工厂方法模式,所谓工厂方法模式解决的就是一个客户不知道创建哪一个类的问题,而这种模式对此的解决方法就是:我定义一个专门用来创建对象的接口,让它的子类来决定创建哪一个对象。就是说,客户可以将创建对象这个问题抛给程序,让程序来选择创建哪一个对象(说白了就是程序员把创建对象的选择这件事也给包了,客户只需要输入一些基本的信息,程序来创建对象)。

这里给出一个例子:

这里,TraceFactory接口就是来实现创建对象的接口,然后下面getTrace方法就给客户创建一个对象,选择性一般就是通过if语句来体现。当然如果程序没那么复杂,你不想定义接口,你就直接用一个类来实现创建对象操作即可。

下面说一下结构型模式:适配器模式(adapter)、装饰器模式(decorator)。

适配器模式:将某个类/接口转换成为客户期望的其他形式(说白了就是客户的需求/spec变了)。

这里用一个图就比较好理解了:

 我的理解就是,客户呢更改了他的需求,比如说他们能加了一些方法,而我们之前的类只能实现他之前的方法,这个时候我们增加一个接口将之前的子类包装起来,这个时候我们的子类只能实现那些之前的方法,可是增加的方法怎么办呢?这里通过delegation委派给其他类来做,就完成了这个结构了。

装饰器模式:让每个子类实现不同的特性。这个就有意思了,这个里面用到了一个自己委派自己的机制,如下图:

装饰器通过自己委派自己,将父类那些功能实现,然后在实现基本方法的基础上再在它的子类中增加一些新特性,这里我之前有个疑问,为什么增加新特性不直接在父类操作呢,而要造一个装饰器来过度呢?(我的同学给了我一些答案,也供大家探讨:因为父类有很多的子类,所以尽量不要直接对父类进行操作,容易影响别的子类的继承)。

最后说一下行为模式:策略模式、模板模式、迭代器(Iterator)、Visitor

策略模式(strategy):这个看一下图就明白了,也是经常用,就是你一个任务你会定义一个实现,但是如果客户要求用另一种方法去实现,你去改代码就很麻烦,你可以将这个任务委派给ADT,然后当你要改的时候只需在ADT中增加一个方法即可。如图:

模板模式(template):这个就更常见了,它的特点是只是用继承,那这样怎么提升复用性呢,很简单:只要把共性的东西放在父类就好了,这样子类就不用再写了,这里略写。

迭代器(Iterator):这个就类比list那些集合的迭代器,我想遍历一组ADT对象,我用不同直接用iterator方法,那怎么办呢?我们自己定义一个Iterator方法,在里面返回一个自定义ConcreteIterator 类实现Iterator接口,并且重写其中的next、hasNext、remove方法即可,这样就可以按照list一样进行迭代了。如图:

visitor:visitor模式我认为是一种比较难以理解的模式了,他应用于一个什么场景呢?就是:某种特定类型的object对应于特定的操作,我们为了灵活更改代码,将两个动态绑到一起。如图:

 

这种动态绑定体现在哪里呢,我认为体现在visitor和concretevisitor中,即你输入的visitor类型于你的实现方法时绑定的,我们面对客户时,暴漏的只有accept方法,客户只需要输入想操作的visitor即可,然后通过accept委派给visitor,最后在visitor中调用visit方法,来与visit对应的实现类动态绑定并实现,也就是说这种模型将实现方法与类型绑定在了一起,适用于这种开发场景,而客户看起来任何类型的输入,调用的代码都是一样的,这样会使客户的使用体验很好。

以上就是我对于这些设计模式的个人理解,如果有的地方不对,还请指正。 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 做软件工程课程设计管理系统的过程中,我得到了以下感受和收获: 1. 系统开发需要有良好的规划和设计,否则会出现许多问题。我学会了如何进行系统的需求分析、设计和实现,并且理解了软件工程的重要性。 2. 团队协作是成功的关键。在项目中,我学会了如何与团队成员进行有效的沟通和协作,以便在规定的时间内完成任务并达到预期的结果。 3. 学会了如何使用一些常用的开发工具和框架,例如数据库管理系统、Web框架和前端框架等。 4. 在整个开发过程中,我也遇到了许多问题和挑战,但通过不断的努力和解决方案的探索,我学会了如何解决这些问题。 总之,做软件工程课程设计管理系统是一个非常有价值的经验,我学到了很多关于软件开发和团队协作的知识,并且增强了我的解决问题的能力。 ### 回答2: 在做软件工程课程设计管理系统的过程中,我有了很多感受与收获。首先,我意识到软件工程是一项复杂而细致的工作。设计一个高效、可靠的管理系统需要考虑到诸多因素,包括用户需求、系统架构、数据处理等。这让我深刻认识到了软件工程的难度和重要性。 其次,我学会了团队合作与沟通的重要性。在这个项目中,我与同学们一起协同工作,每个人都有自己的任务和职责。我们需要互相配合、交流和协商,才能顺利实现项目目标。这让我体会到了团队合作的力量,并提高了我的沟通能力。 此外,我还掌握了一些技术和工具。在开发过程中,我学会了使用一些软件开发工具,比如Eclipse和GitHub等。我还学会了使用一些编程语言和技术,如Java、数据库设计和开发等。这些技术和工具的掌握对我的技术能力和职业发展都是有帮助的。 最重要的是,我在实践中学到了很多实用的知识和技能。通过设计和开发一个管理系统,我深入了解了软件工程的各个环节和流程,包括需求分析、系统设计、编码、测试和部署等。这让我对软件工程的整个过程有了全面的认识,为我以后从事软件开发工作打下了基础。 总之,做软件工程课程设计管理系统让我受益匪浅。不仅加深了对软件工程的理解和认识,还提高了我的团队合作能力和沟通能力,并掌握了一些实用的技术和工具。这对我的学习与职业发展都具有重要的意义。 ### 回答3: 在做软件工程课程设计管理系统的过程中,我有以下几点感受与收获。 首先,我深刻体会到了软件工程的重要性。在开发过程中,我意识到了系统的复杂性以及各个模块之间的相互关系。通过学习软件工程的相关知识,并将其应用到实践中,我明白了良好的软件工程实践可以提高开发效率和质量,避免后期的问题和风险。 其次,我对团队合作有了更深入的了解。在开发过程中,我与团队成员合作,共同分工、讨论问题、解决难题。通过与他人的交流与合作,我学会了如何更好地与团队成员协作,分享和借鉴他人的经验和知识,提高了自己的技术能力和解决问题的能力。 再次,我体会到了项目管理的重要性。在项目进行过程中,我需要与团队成员一起进行需求分析、功能设计、进度控制等各个环节的管理。通过对项目的规划和控制,我学会了如何合理安排时间、资源和任务,提高项目的整体效率和质量。 最后,通过这个项目,我真切感受到了自己的成长和进步。在项目中,我面临了各种挑战和难题,但通过不断地学习和思考,我逐渐克服了困难,最终成功完成了项目。这个过程让我更加自信,也增强了我解决问题的能力和沟通能力。 综上所述,做软件工程课程设计管理系统让我深刻了解了软件工程的重要性,提高了我团队合作和项目管理的能力,同时也让我感受到了自己的成长和进步。这对我今后的学习和工作都具有重要的积极影响。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张丰麟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值