设计模式学习(下)

        设计模式学习

引言

       对于掌握了一定设计模式知识的人,如何才能更进一步掌握、才能熟练应用设计模式,是一项迫切而且艰巨的任务,所以根据自己的知识水平,我决定系统得分析设计模式知识结构,为更进一步分析各个设计模式做好知识和方法准备。

软件生命周期

       是软件的产生直到报废的生命周期,包括问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。

      初级软件开发者比较容易忽视软件开发周期中的运行阶段和维护升级阶段。但是这是软件生命周期中最长的阶段,在这个阶段需要对软件的功能进行扩展,对错误进行纠正等。如果没有对软件进行这些完善和补充,软件将不能存在,软件将进入报废,结束软件生命。

软件需求

       软件需求会不断变化,导致软件需求变化的原因很多,譬如软件需求收集不完善、软件需求表达不清楚、客户业务变化等。总之软件需求是不断变化的,这简直是一个定律。

软件程序分析

       如果没有进行良好架构的软件,程序基本是按照功能分解方式进行编写的,这样的缺点很多,比如一个功能可能在很多地方实现了,如果这个功能需要改变则会要改变很多地方;如果没有良好设计的代码,需要新增功能则需要修改原来老代码,这样做必然带来风险,等等。

       上面的问题归结起来可以看有四点:过于僵硬、过于脆弱、复用率低、黏度过高

       尽管软件开发存在很多问题,但是上述代码结构问题确实是一个很大问题,如何解决好上述问题就摆在软件开发者前面的一个迫切任务

软件设计目标

       从产品层看,软件设计目标有两个,一个是软件复用;二是软件可维护

       一个软件维护时间是开发时间的几十倍甚至更多,所以软件的维护费用也是开发费用的几倍,所以一个维护性好的软件的重要性不言而喻。

       软件的良好可复用性能够高效率地生产产品和能够产生高质量产品。

       由于软件设计是直接为编码服务的,所以要从编码的角度看软件设计的目标。从编码看软件设计的目标是实现开闭目标,经过设计的代码结构对修改关闭,对扩展开放。通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性;已有的软件模块,特别是重要的抽象的模块不能修改,这就使变化中的软件系统有一定的稳定性和延续性

面向对象特性

       对象

       多态

       继承       

软件设计技术原则(应该还要整理)

       从代码角度看:开闭原则

       依赖倒转原则(对象间关系):要依赖于抽象,不要依赖于具体

       合成 / 聚合原则(对象间关系):尽量使用合成 / 聚合达到复用,而不是使用继承

       迪米特法则(对象间关系):一个软件实体应当尽可能少的与其他实体发生联系

       接口隔离原则(编码):应当为客户提供尽可能小的接口,而不是大的总接口

       对象:拥有某种责任的东西。对象应该对自己负责,并且这种责任应该被清楚地定义出来

       从分析角度看:避免过早处理细节

       从分析角度:发现并封装变化

       从编码角度:针对接口编程

       设计应该由对问题的一个简单陈述开始,然后通过向这个陈述中加入信息使它变得更详细(复杂)

       从模式的方法思考:从场景进行设计

       包容变化原则:决不让一个类包含两件变化并以某种方式耦合在一起的事务

       通过矩阵分析,找到变化的因素

       从编码看,一个功能方法只能实现一次

       从编码角度:分离调用者和被调用者,减少他们之间依赖

设计模式的本质

       如果把软件系统看成是对象的集合,则从局部范围内,模式告诉我们如何在模式的场景内解决特定的问题;在全局范围内,模式创建一张关于应用程序的组件之间如何相互关联的图;如果把软件看成事代码的集合,则设计模式的本质是把代码里变化的那一部分分离出来。学习设计模式是学习如何在局部和全局范围内使用它们;学习设计模式也是学习他们的机制,以及作为他们基础的原则和策略;学习设计模式还是学习推演设计模式,掌握单个模式意图区别。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值