(软件构造01)浅谈+总结设计原则

Lab3已经过去了一周左右,从课上老师的传授到实验中自己的摸索,对软件构造中的设计模式有了一点自己的认识,本文中我就从自己的经验出发,对设计模式进行一些总结。【我总结的方法分为三个部分:1、自己理解的通俗解释 2、举例 3、目的总结,可能还会添加一些自己在Lab3中的应用】
1、开闭原则(Open Close Principle)
(1)自己的理解:软件模块应该对扩展开放,对修改关闭。
(2)举例:在程序需要进行新增功能的时候,不能去修改原有的代码,而是新增代码,实现一个热插拔的效果(热插拔:灵活的去除或添加功能,不影响到原有的功能)。
(3)目的:为了使程序的扩展性好,易于维护和升级。
在Lab3中的应用:
由于我在Lab3中采用实验指导书中采用的 接口组合 模式,对每一个新增功能我都全新设计一个接口,而不是冗杂地加在一个实现类或者是接口上,Lab3目录如下:在这里插入图片描述
2、里氏替换原则(Liskov Substitution Principle)
(1)自己的理解:个人认为是最最最基础地设计原则,里氏代换原则是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用.
(2)举例:这个例子其实对于我来说很好理解,从实验一开始好奇为什么可以用ArrayList、LinkedList替换List就开始有一点点概念,直到老师向我们介绍这样一个规则。
(3)目的:对实现抽象化的具体步骤的规范
在Lab3中应用广泛,用Plane、Teacher、Compartment替换Resource等等一系列都可以体现出该思想。
3、依赖倒转原则(Dependence Inversion Principle)
(1)自己的理解:针对接口编程,而不是针对实现编程。
(2)现实生活中的举例:以计算机系统为例,无论主板、CPU、内存、硬件都是在针对接口设计的,如果针对实现来设计,内存就要对应到针对某个品牌的主板,那么会出现换内存需要把主板也换掉的尴尬。
(3)目的:降低模块间的耦合。
从Lab2 Graph面向接口编程就能清楚地感受到 在Lab2任务二【社交网络】可以便利地应用任务一针对接口设计地Graph类,既可以用ConcreteEdgeGraph、又可以用ConcreteVertexGraph,有很大的便利,再在任务三种针对新的变化因为面向接口设计而变得非常方便,不超过一个半小时就可以完成【虽然有一个新变化我写错了。。。】,都让我体会到了依赖转置原则的便利。
4、单一职责原则( Single responsibility principle )
(1)自己的理解:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。
(2):该原则意思简单到不需要举例!
(3)目的:类的复杂性降低,可读性提高,可维护性提高。
Lab3中虽然感觉接口特别特别多,每一个功能【resetLocation、SingleLocation、Blockable…】都有一个接口,看似非常繁琐,但是组合起来形成新的功能体就非常方便,生成的继承树也不复杂,非常好用。

public interface CoursePlanningEntry extends SingleLocationEntry,LocationResetableEntry
	,SingleResourceEntry<Teacher>,SingleTimeslotEntry{
	}

5、接口隔离原则(Interface Segregation Principle)
(1)自己的理解:使用多个隔离的接口,比使用单个接口要好。
(2)举例:比如:登录,注册时属于用户模块的两个接口,比写成一个接口好。
(3)目的:提高程序设计灵活性。
综上:这些原则看似复杂,但是投入应用之后真的能感觉到便利,今天的总结也会给我期末复习提供帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值