软件设计遵循的基本原则

打算写一个设计模式系列的学习笔记,参考书籍《软件秘笈---设计模式那点事》

1、设计模式概述

1.1)高内聚、低耦合

  一个软件系统要有一个稳定的架构,不会随着需要的改变在发生巨大的变动。因此,高内聚、低耦合是一个软件系统设计中必须遵循的基本原则。

  所谓高内聚,是指一个软件模块内各个元素彼此结合的紧密程度要高,即一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。

  所谓低耦合,是指一个软件系统内不同模块之间的互连程度要低。不同模块之间的联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性、调用的方式及传递的信息。

  因此,在一个软件系统中,应当尽量保证模块的独立性,模块实现功能职责单一,越简单越好。这样有利于系统复用,并且大大减少模块之间的依赖,系统稳定性高,更易于维护。

1.2)面向抽象编程

  在面向过程的软件开发中,上层组件调用下层组件,就意味着上层组件依赖于下层组件,当下层组件发生剧烈变化时,上层组件也要跟着一起发生变动,这将导致软件组件模块的复用性大大降低,从而增加软件开发成本,使软件结构设计上存在一定的臃肿性,不利于后期系统维护工作。

  在面向对象的软件设计中,很好地解决了上述问题,使程序都依赖于抽象,而不是依赖具体实现。因为在一般情况下抽象的变化概率比较小,依赖抽象编程大大降低了客户应用程序与实现细节的耦合度,提升了软件结构的健壮性。只要保证抽象不发生变化,客户程序就不需要改变。这就是依赖倒置原则。

  在程序中要尽量使用抽象类型作为对象实例变量类型,这样就保证了将客户程序与具体实现之间解耦,因为使用的是抽象类型,因此具体实现的改变不会影响抽象类型的改变。

1.3)多用组合少用继承

  在面向对象的软件设计中,对于类的扩展,首先想到的是使用类的继承来实现,由子类来继承父类,从而完成对子类功能的扩展。继承的好处是可以尽量让相同的属性或者功能复用,但是随着项目越来越大,需求的不断变化,继承就会变得越来越臃肿,后期难以控制和维护。最重要的是,继承会不分青红皂白地把父类的公有和受保护的方法统统继承下来,而这些方法可能是子类不需要的功能,会对子类产生一些危害。

  如果使用组合方式,就不会出现上述继承的问题。所谓对象组合,是指在一个对象中含有另外一个对象的引用,从而可以使用该内部对象的引用作出一些处理行为。使用组合方式的好处有以下几点:首先,不会对类产生有害的影响;其次,组合方式要比继承方式灵活,因为是由系统运行动态地决定使用对象与否;最后,不会造成因继承而引起的类膨胀,减少了对父类的依赖性。

1.4)“开-闭”原则

  “开-闭”原则,即“对扩展开放,对修改关闭”,指的是在软件设计中,当对某一软件实体进行扩展时,尽量不要去修改原有的软件实体,换句话说就是在不修改原有软件实体的情况下对其进行扩展。这种软件设计方式其实是一种目标,它考虑了软件后期的维护等其他因素。一个软件系统如果可以达到这个目标,那它就是可扩展、易维护的。

  在软件设计领域中,众多设计模式的应用就是为了达到这个目标。“开-闭”原则是一种很抽象的设计原则,更像是一种倡导的口号,其他设计原则都是为了实现“开-闭”原则的具体原则。“开-闭”原则与其他设计原则就好比抽象父类与子类的关系一样。

 

2、设计模式概述

2.1)什么是设计模式

  设计模式的概念最早是由一名建筑师提出来的,他试图在图纸上用一种结构化、可重用化的方法,获得建筑的基本要素,从而可以将更多的精力放在具体建筑物和城镇的设计上。逐渐的,这种思想在软件领域流行起来,并获得发展。

  设计模式(Design Pattern)就是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验的总结。使用设计模式的目的是为了提高代码的可重用性,让代码更容易被他人理解,使系统质量更加有保证、系统更加可靠。

2.2)设计模式的分类

  设计模式是一种解决问题的思想,它可以应用在任何环境中,保证系统的稳定运行。

  按照目的来分,设计模式可以分为创建型模式、结构型模式和行为型模式。

2.2.1)创建型模式

  创建型模式用来处理对象的创建过程,主要包含以下5种设计模式:

  ☆工厂方法模式(Factory Method Pattern)

  ☆抽象工厂模式(Abstract Factory Pattern)

  ☆建造者模式(Builder Pattern)

  ☆原型模式(Prototype Pattern)

  ☆单例模式(Singleton Pattern)

2.2.2)结构型模式

  结构型模式用来处理类或者对象的组合,主要包含以下7种设计模式:

  ☆适配器模式(Adapter Pattern)

  ☆桥接模式(Bridge Pattern)

  ☆组合模式(Composite Pattern)

  ☆装饰者模式(Decorator Pattern)

  ☆外观模式(Facade Pattern)

  ☆享元模式(Flyweight Pattern)

  ☆代理模式(Proxy Pattern)

2.2.3)行为型模式

  行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下11种设计模式:

  ☆责任链模式(Chain of Responsibility Pattern)

  ☆命令模式(Command Pattern)

  ☆解释器模式(Interpreter Pattern)

  ☆迭代器模式(Iterator Pattern)

  ☆中介者模式(Mediator Pattern)

  ☆备忘录模式(Memento Pattern)

  ☆观察者模式(Observer Pattern)

  ☆状态模式(State Pattern)

  ☆策略模式(Strategy Pattern)

  ☆模板方法模式(Template Method Pattern)

  ☆访问者方法模式(Visitor Pattern)

posted @ 2018-03-12 12:58  shanquan  阅读(4455)  评论(0编辑  收藏  举报