设计模式相关概述

设计模式最初并不是出现在软件设计中,而是被利用于建筑领域的设计中

1.1 概念

1、软件设计模式:又被称为设计模式,是一套被反复使用,多数人知道的,经过分类编目的,代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一些列套路,是前辈们的代码设计经验总结,具有一定的普遍性。可以反复的使用。
2、设计模式的本质是面向对象设计原则的实际运用。是对类的封装性,继承性,多态性以及类的关联关系和组合关系的充分理解。

1.2 设计模式分类

1)创建型模式(5种)
主要用于描述如何创建对象,特点是:将对象的创建和使用分离。

  • 单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式

2)结构型模式(7种)
用于描如何将类或者对象按照某种布局组成更大的结构。

  • 适配器模式、桥接模式、装饰者模式、组合模式、外观模式、亨元模式、代理模式

3)行为型模式(11种)
用于描述类或者对象之间是怎样协作共同完成单个对象无法单独完成的人物,以及怎样分配职责的。

  • 模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解析器模式、状态模式、策略模式、职责链模式、访问者模式

1.3 UML

统一建模语言,是用来设计软件的可视化建模语言。它的特点是简单,统一,图形化,能表达软件设计中的动态于静态信息。 UML从目标系统的不同角度触发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等9种图。

这里主要介绍一下类图
1)类图是显示模型的静态结构,特别是模型中存在的类,类的内部结构以及它们与其他类的关系等。类图不显示暂时性地信息。类图是面向对象建模地主要组成部分。
2)类图可以描述系统中类的集合,类的属性和类之间的关系。简化人们对系统的理解。

1.4 软件设计原则

在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,开发者尽量是根据6条原则进行开发程序,从而提高软件开发效率,节约软件开发成本和维护成本。

1.4.1 开闭原则

1)对扩展开放,对修改关闭。在程序进行扩展时,不能去修改原有的代码,实现一个热拔插的效果。简言之,是为了程序的扩展性好,易于维护和升级。
2)为了达到这样的效果,我们需要使用接口和抽象类。

1.4.2 里氏替换原则

1)里氏代换原则时面向对象设计的基本原则之一。
2)里氏代换原则:任何基类可以出现的地方,子类一定可以出现。通俗理解:子类可以扩展父类的功能,但是不能改变父类原有的功能。换句话说,子类继承父类的时候,除了添加新的方法完成新增的功能之外,尽量不要复写父类的方法。
3)如果通过重写父类的方法来完成新功能,这样写起来虽然很简单, 但是整个继承体系的可复用性会比较差,特别是运用多态比较频繁的时候,程序出错的概率会非常大。

1.4.3 依赖倒转原则

1)高层模块不应该依赖底层模块,两者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块之间的耦合。

1.4.4 接口隔离原则

1)客户端不应该被迫依赖于它不使用的方法上,一个类对一个类的依赖应该建立在最小的接口上

1.4.5 迪米特原则

1)迪米特原则又叫做最少知识原则
2)只和你的直接朋友交谈,不跟”陌生人”说话
3)其含义:如果两个软件实体没有直接通信, 那么就不应该发生直接的相互调用,可以通过第三方转发该调用。其目的就是降低类之间的耦合度,提高模块之间的相互独立性。
4)迪米特法则中的朋友是指:当前对象本身 ,当前对象的成员对象,当前对象所创建的对象, 当前对象的方法参数等,这些对象同当前对象存在关联,聚合,组合关系,剋直接访问这些对象的方法。

1.4.6 合成复用原则

尽量使用组合,聚合等关联关系,其次才是考虑使用继承关系来实现。
通常类的复用分为:继承复用,合成复用

二 创建型模式

创建者模式一共有5种:工厂方法模式,抽象工厂模式,单例模式,原型模式,生成器模式。
创建型模式提供了创建对象的机制,能够提升已有代码的灵活性和可复用性。

三 结构型模式

结构型模式介绍如何将对象和类组装成较大的结构,并同时保持结构的灵活和高效。
1)结构型模式描述:如何将类或者对象按照某种布局组成更大的结构
2)分为类架构型和对象结构型
3)前者主要采用继承机制来组织接口和类,后者采用组合或者聚合的方式来组合对象。
4)一共有7种:

  • 代理模式,适配器模式,装饰者模式,桥接模式,外观模式,组合模式,享元模式
  • 适配器模式又分类结构的和对象结构两种不同实现

    四 行为模式

    行为模式负责对象间的高效沟通和职责委派。
    1)类模式:解释器模式,模板方法模式
    2)对象模式:责任链模式,命令模式,迭代器模式,中介者模式,备忘录模式,观察者模式,状态模式,策略模式,访问者模式