设计模式简介

我们在开发的过程中,为了使代码更加的灵活和易于扩展,总会使用各种各样的设计模式来设计我们的代码。那么本系列文章就来详细的介绍下设计模式

设计模式的分类

在java中按照设计模式大体上分为三类

1.创建型模式:抽象了对象实例化的过程用来帮助创建对象的实例

共5种:单例模式、建造者模式、原型模式、工厂方法模式、抽象工厂模式

2.结构型模式:描述如何组合类和对象以获得更大的结构

共有7种:适配器模式、装饰模式、代理模式、门面模式(也称为外观模式)、组合模式、享元模式、桥梁模式

3.行为型模式:描述算法和对象间职责的分配

共有11种:策略模式、模板方法模式、观察者模式、迭代器模式、命令模式、责任链模式、备忘录模式、访问者模式、状态模式、中介者模式、解释器模式
当然也有其他的分类方式,我们这里就不在进行讨论了

设计模式和面向对象设计原则

面向对象的分析设计有很多原则,这些原则大都从思想层面,给我们指出面向对象思想层设计的正确方向。我们在进行面向对象分析设计的时候,应该尽力的去遵守这些原则。

设计模式遵循的6大原则

1.单一职责原则(Single Responsibility Principle ,简称 SRP)

定义:应该有且仅有一个原因引起类的变更
优点
1.降低了类的复杂性,各个类的职责清晰明确
2.提高了代码的可读性和可维护性
3.提高了系统的拓展性

2.里式替换原则(Liskov Substitution Principle ,简称 LSP)

定义:所有引用基类的地方都必须能透明地使用其子类的对象
里氏替换原则为良好的继承定义了一个规范,一句简单的定义包含了四层含义:
1.子类必须完全实现父类的方法。如果子类不能完整地实现父类的方法,或者父类的某些方法在子类中已经发生了改变,则建议断开父子继承关系,采用依赖、聚集、组合等关系代替继承;
2.子类可以有自己特有的属性和方法;
3子类覆盖或实现父类的方法时输入参数可以被放大(子类中的方法的前置条件必须与父类中被重写的方法的前置条件相同或者更加宽松)。
4重写或实现父类的方法时输出结果可以被缩小
优点

  1. 提高代码复用性
  2. 父类的属性方法可以用于子类
  3. 可以轻松的定义子类
  4. 使设计应用程序变得简单

3.依赖倒置原则(Dependence Inversion Principle,简称DIP)

定义:模块间的依赖通过抽象发生,实现类之间不发生直接依赖关系,其依赖关系是通过接口或者抽象类产生的(即依赖抽象而不依赖具体)
优点
1.规避一些非技术因素引起的问题
2.可以减少需求变化引起的工作量剧增的情况
依赖倒置原则在小型项目中很难体现

4、接口隔离原则(Interface Segregation Principle,简称ISP)

定义:
使用多个隔离的借口来降低耦合度,即将接口细化,为每个功能模块提供单一的接口,而不是提供一个庞大而臃肿的接口来使用
接口隔离原则包含了一下四层含义:
1.接口细化,但是不能违背单一职责原则
2.接口要高内聚,即提高接口、类、模块的处理能力,减少对外交互。
3.定制服务,即只为访问者提供需要的方法
4.接口设计要有限度,不可过度细化

5、迪米特法则(Low of Demeter,简称LoD,也称为最少知道原则)

定义
一个对象应该对其它对象有最少的了解
这句话的意思就是说一个类尽量不要对外公布太多的public方法和非静态的内部变量,尽量内敛,这样做是为了减少在修改时风险的扩大。
迪特米法则的核心观念就是类间解耦,弱耦合,只有弱耦合了之后,类的复用率才得以提高

6、开闭原则

定义
简单来说就是对修改关闭,对扩展开放
注意:开闭原则对修改关闭,对拓展开放,并不意味着不做任何修改,底层模块的变更必然要有高层模块进行耦合,否则就是一个孤立无意义的代码片段。
开闭原则的重要性
1.利于测试
2.提高了复用性
3.提高了可维护性
4.面向对象开发的要求

参考

《设计模式之禅》

你可能感兴趣的:(设计模式简介)