设计模式之设计模式的概述

一.面向对象设计原则

  1. 概述

  • 通常认为,一个易于维护的系统就是复用率高的系统,而复用性较好的系统就是易于维护的系统。对于面向对象的软件系统来说,在支持可维护性的同时提高系统的可复用是一个核心问题。

  • 可维护性低的软件特性:过于僵硬,过于脆弱,复用率低,黏度过高。

  • 一个好的系统应该具备如下特质:可扩展性,灵活性,可插入性

  1. 单一职责原则

  • 定义:一个对象应该只包含一个单一的职责,即一个类只做一件事,不能将太多的职责放入一个类中。它用于控制类的粒度大小。

  • 实例:例如我们数据库层面的操作中,规定一个userDao类只做用户表的增删改查功能。

  1. 开闭原则

  • 定义:一个软件实体应当对扩展开放,对修改关闭,即在不修改源代码的前提下改变这个模块的功能。软件实体可以是一个软件模块,一个由多个类组成的局部结构,一个单低的类。

  • 实例:例如Mabatis框架中简单的对表增删改查功能的实现,只需要在xml文件中更改相关的sql语句即可修改该代码的功能。

  1. 里氏代换原则

  • 定义:子类对象必须可以替换掉他们的父类型,且程序不会有任何的错误。它是实现开闭原则的重要方式之一。

  1. 依赖倒转原则

  • 定义:高层模块不应该依赖于底层模块,他们都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。即依赖抽象类和接口,而不依赖具体的实体类。在抽象类或者接口中定义功能,由其子类去实现具体的细节,而不是子类继承具体的实体类父类。

  • 类之间的耦合(依赖关系):

零耦合关系(没有耦合关系),具体耦合关系(耦合发生在两个具体的实现类),抽象耦合关系(耦合发生在一个具体类和抽象类之间)。

  • 依赖注入:依赖注入就是将一个类的对象传入另一个类,注入时尽量注入父类对象,而在程序运行时再通过子类对象覆盖父类对象。一般分为构造注入(通过类的构造器),设值注入(通过类的setter方法),接口注入(通过接口具体实现方法)。

  • 实例:Spring框架中进行bean的管理并对类的成员变量赋值操作.

  1. 接口隔离原则

  • 定义:一旦一个接口过大,则需要将它分割成一些细小的接口,使用该接口的客户端只需要知道与之相关的方法即可。

  • 在使用接口隔离原则时应注意接口的粒度,接口不能太大,也不能太小。一般而言,接口中仅包含为某一类用户定制的方法即可。

  1. 合成复用原则

  • 定义:又称为组合/聚合复用原则,尽量使用对象组合,而不是继承来达到复用目的。即多使用关联关系,少使用继承关系。

  1. 迪米特法则

  • 定义:又称为最少知识原则,指一个软件实体应当尽可能少的与其他实体发生相互作用。这样,当一个模块修改时,就会尽量少的影响其他的模块,扩展相对容易。这是对软件实体之间通信的限制,它要求软件实体之间通信的深度与宽度。

  • 注意:

类之间的耦合度越低,越有利于复用。

每一个类应当降低其成员变量和成员方法的访问权限。

一个对象对其他对象的引用应降到最低。

二.设计模式概述

  1. 定义

设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用这些设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

简单来说就是一套前人的经验。帮助我们更好的编写代码。

  1. 分类

  • 根据其目的(模式是用来做什么的)可以分为三类:创建型,结构型,行为型。

  • 创建型模式主要用于创建对象,GoF主要提供了5种创建型模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式,和单例模式。

  • 结构型模式主要处理类或对象的组合,GoF提供了7种模式,分别是适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。

  • 行为型模式主要用于描述类或对象怎样交互和怎样分配职责,GoF提供了十一种行为型模式,分别是职责链、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。

  • 根据范围分类(模式主要处理对象之间的关系还是类之间的关系)

类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,属于静态的。

对象模式处理对象间的关系,这些关系在运行时刻发生变化,更具动态性。

  1. 简介

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值