设计模式入门

来源:互联网 发布:太阳辐射强度数据 编辑:程序博客网 时间:2024/05/22 10:58

       在我们工作的初期阶段,我们自己所写出来的代码往往特别混乱,一个类的代码过多,代码的耦合度特别高,不具有复用性,当过一段时间我们在回来修改自己的代码时发现我们自己都很难看懂了,还需要花很长的时间去理,这时候就会觉得特别的痛苦,感慨自己怎么能写成这样,在做开发的过程中,自己慢慢的感觉到,自己实现的代码其实都是面向过程的,但确打着 Java 面向对象的幌子,写出来的东西充满了面向过程的味道,总觉得缺少点指导思想的东西


       这段时间在看 <<Head First>> 设计模式一书,觉得非常不错,有必要总结一下,于是就想借鉴参考 <<Head First>> 把设计模式总结成一个系列的博客,方便自己日后来复习,今天我们就简单的来先一起入门一下,简单的探讨一下设计模式,设计模式是人们在面对同类型软件工程设计问题所总结的一些有用的经验,模式不是代码,而是某类问题的通用设计解决方案,设计模式的本质是使软件工程在维护性、扩展性、变化性、复杂度方面变成 O(N),提到设计模式我们就不得不提面向对象的六大设计原则,这里我们不做详细的讲解,只是简单的概括了解一如下


一、面向对象六大设计原则


1. 单一职责原则


       简单说,就是一个类只做一件事情,主要是对于类职责的定义,什么类负责什么职责,以及怎么划分职责,当然有时候并不是那么的清晰,可能很多时候职责的划分要靠对于业务的理解,以及个人的经验来界定,如果我们遵守这个职责,那么我们类的划分就具有了单一的职责,也就达到了高内聚,低耦合,还需要我们慢慢从经验中来总结,并不能一下就水到渠成

单一职责优点:

  • 类的复杂性降低,现实什么都有比较明确清晰地定义
  • 代码的可读性提高,复杂度降低
  • 可维护性提高,具有更好的扩展性
  • 业务变更引起的不断修改降低


2. 里氏替换原则


       面向对象语言的 3 大特点是继承、封装、多态,里氏替换原则是依赖于继承、多态这两大特性,里氏替换原则简单来说就是所有引用基类,接口的地方必须能透明的使用其子类的对象,也就是说,只要父类能出现的地方,子类就可以出现,而且替换为子类也不会出现错误和异常,但是反过来就不行,有子类出现的地方,父类未必就能适应

里氏替换优点:

  • 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性
  • 提高代码的重用性
  • 提高代码的可扩展性
  • 提高产品或代码的开放性

里氏替换缺点:

  • 继承是侵入性的,只要继承,就必须拥有父类的所有属性和方法
  • 降低了代码的灵活性,子类必须拥有父类的属性和方法,让子类有了一定的约束性
  • 增强了耦合性


3. 依赖倒置原则


在 Java 中,抽象就是指接口或者抽象类,两者都是不能被直接实例化的,细节就是实现类、实现接口或继承抽象类而产生的类就是细节,其特点就是可以被直接实例化,依赖倒置原则在 Java 语言中的表现就是,模块间的依赖通过通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的,也就是面向接口编程,采用依赖倒置的原则可以减少类间的耦合,提高系统的稳定性,提高代码的可读性和可维护性

依赖倒置优点:

  • 可扩展性好
  • 耦合度低


4. 开闭原则


开闭原则是Java里设计最基本的设计原则,开闭原则的定义是:

       一个软件实体如类、模块和函数应该对扩展开放,对修改关闭,在软件的生命周期内,因为变化,升级和维护等多种原因需要对代码进行不断的修改,可能会给旧代码引入错误,因此当软件需要变化时,我们应该尽量通过扩展的方式来实现,而不是通过已有的代码

开闭原则优点:

  • 增加稳定性
  • 可扩展性高


5. 接口隔离原则


       客户端不应该依赖它不需要的接口:一个类对另一个类的依赖应该建立在最小的接口上,根据接口隔离原则,当一个接口太大时,我们需要把它分成更细小的接口,使用改接口的客户端只需要知道与之相关的的方法即可

接口隔离原则有点:

  • 隐藏实现的细节
  • 降低耦合性
  • 提升代码的可读性


6. 迪米特原则


       迪米特原则也称为最少知识原则,一个对象应该对其他的对象有最少的了解,也就是说一个类应该对自己需要耦合或调用的类知道得最少,这有点类似于接口隔离原则中最小接口的概念,类的内部如何实现、如何复杂都与调用者或者依赖着没有关系,调用者或者依赖者只需要知道它需要的方法即可,其它的一概不关心,类与类之间的关系越密切,耦合度就越高,当一个类发生改变时,对另一个类的影响也越大

迪米特原则优点:

  • 降低复杂度
  • 降低耦合度
  • 增加稳定性


       面向对象的六大原则在我们的开发中非常的重要,希望引起大家的注意,我们在经验慢慢的提升过生中多去使用,因为它给应用程序带来了灵活性、可扩展性,高度解耦,如果在开发中使用好这些原则,在一些适合的场景中去运用,不且不断地去思考,改进



二、设计模式


       设计模式并不能用来直接完成代码的编写,只是描述在不同情况下解决问题得方案,面向对象设计模式通常以类或对象来描述其中的关系和相互作用,他们的相互作用能够使软件系统具有高内聚、低耦合,可扩展的特性,并且使软件具有很高的灵活性,对应变化


Java 中的 23 种设计模式,我们来简单的罗列一下,以后会对我们经常在项目中用到的进行详细的解释:


1. 策略模式

设计模式之策略模式

2. 观察者模式

设计模式之观察者模式


3. 装饰者模式


4. 单例模式

设计模式之单例模式


5. 工厂模式


6. 命令模式


7. 适配器模式


8.外观模式


9. 模板模式


10. 迭代器模式


11. 组合模式


12. 状态模式


13. 代理模式


14. 复合模式


15. 桥接模式


16. 生成器模式


17. 责任链模式


18. 蝇量模式


19. 解析器模式


20. 中介者模式


21. 备忘录模式


22. 原型模式


23. 访问模式


声明:文章参考《Head First》以及 Android 开发进阶

今天的额博客就写到这里,以后会把经常用到的慢慢补全,方便查阅