首页 > 学院 > 开发设计 > 正文

设计模式简介

2019-11-14 09:57:18
字体:
来源:转载
供稿:网友

引入设计模式的目的:增强系统的可维护性。

设计模式一般不能提高软件的功能和性能。

 

设计模式(Design Patterns):从建筑领域而来,是对软件设计中普遍存在而又反复出现的各种问题,所提出的解决方案。

设计模式并不直接用来完成程序代码的编写,而是描述在各种不同的情况下,要如何解决问题的一种方案。

四人组针对创建优秀的面向对象设计提出的建议

1、针对接口进行设计;

2、优先使用对象组合,而不是类继承;

3、找到并封装变化点。

 

设计模式可以让我们:

1、复用解决方案。利用已有的模式开发,可以借鉴他人的经验,减少开发成本和风险。

2、建立通用术语。在项目的分析和设计阶段,模式提供了约定俗成的词汇和视角,有利于沟通。

3、解放视角。无论针对问题还是设计,设计模式提供了高层次的视角,开发人员不必一开始就埋头于具体的细节之中。

面相对象:

可维护 改

可复用 替换下来的字仍然有用

可扩展 可加字

灵活性好 可竖排

 

通过封装、继承、多态把程序的耦合度降低。

用设计模式使得程序更加灵活,容易修改,并且易于复用。

编程原则之一:尽可能避免重复。

 

UML中的集中关系: 

依赖关系(Dependency):

类方法的形参或返回值为其他类的对象。

如,新陈代谢(in o2:氧气,in water:水)。

虚线箭头

 

关联关系(Association):

一个类“知道”另一个类。

如,penguin知道climate。

实线箭头

 

聚合关系(Aggregation):

表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。

如,雁群拥有大雁。

空心菱形 +实线箭头

 

合成关系(Composition):

是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一致。

如,大雁拥有翅膀。

实心菱形 +实线箭头

设计模式遵循的几个原则:单一职责原则:

就一个类而言,应该仅有一个引起它变化的原因。

如果能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。

软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。

 

开放封闭原则:

软件实体(类、模块、函数等等)可以扩展,但是不可修改

对于扩展开放(open for extension)

对于更改封闭(closed for modification)

怎样的设计才能面对需求的改变却可以保持相对稳定,从而使得系统可以在第一个版本以后不断推出新的版本呢?

无论模块多么的“封闭”,都会存在一些无法对之封闭的变化。

既然不可能完全封闭,设计人员必须对于他设计的模块应该对那种变化封闭做出选择。

他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。

 

等到变化发生时立即采取行动。

在最初编写代码时,假设变化不会发生。当变化发生时,就创建抽象来隔离以后发生的同类变化。

 

面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。

 

希望的是在开发工作展开不久就知道可能发生的变化。

查明可能发生的变化所等待的时间越长,要创建的抽象就越困难。

 

开放封闭原则是面向对象设计的核心所在。

遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。

开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象。

然而,对于应用程序的每个部分都刻意地进行抽象同样不是一个好主意。

拒绝不成熟的抽象和抽象本身一样重要。

 

里氏代换原则:

子类型必须能够替换掉它们的父类型。

即一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它觉察不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序行为没有变化。

只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。

正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展。

 

依赖倒转原则:

A 高层模块不应该依赖底层模块。两个都应该依赖抽象。

B 抽象不应该依赖细节。细节应该依赖抽象。

针对接口编程,不要对实现编程。

 

依赖倒转其实可以说是面向对象设计的标志,用那种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之那就是过程化设计了。

迪米特法则:

最少知识原则:

如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。

如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

 

迪米特法则首先强调的前提是:在类的结构设计上,每一个类都应当尽量降低成员的访问权限。

迪米特法则其根本思想,是强调了类之间的松耦合。

类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表