java 设计模式 简介

java 主流的设计模式有23种,这23种设计模式又分为三大类。创建型模式(5种)、结构型模式(7种)、行为性模式(11钟)。这23中设计模式之间相互之间都有一定的关系,这个下面我们可以是用来一幅图来展现他们。java 设计模式 简介

这里,我们不讨论这里面23种的设计模式详情,我们这谈论一下创建型模式、结构型模式、行为行模式这三大类的大致区别。
我们很好理解,创建型模式只要讲究的是控制对象的创建过程,如单例模式,整个系统只给出了一个实例化对象。
结构型模式则看重对象整个结构,如何通过对象之间的关系,让他们形成一个更大更好的结构,不关心对象的产生及行为,这里我们经常可以听到一句话,少用继承,多用组合,就是结构型模式的运用。
行为模式就是我们控制对象的行为,算法和对象间的职责分配,不仅描述对象或类的模式,还描述它们之间的通信方式,刻划了运行时难以跟踪的复杂的控制流,它们将你的注意力从控制流转移到对象间的关系上来。

对于为什么要使用设计模式呢,这里就要说道java程序的语言特点。java是面向对象的,在java里面,一切都是对象,所以我们可以更好的遵循人的思考去编程,去跟计算机打交道。设计模式的基础就是建立在面向对象上的,目的就是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

不管是不是主流的设计模式,只要是设计模式,设计时都应该遵循以下6个原则,这6个原则也是针对面向对象制定的原则。
1,开闭原则。
2,接口隔离原则。
3,知道最少原则。
4,里氏替换原则。
5,合成/聚合复用原则。
6,依赖倒置原则。

1、开闭原则:
这里主要有两个关键点,一个是开,一个是闭。
首先,“开”指的是对扩展开放(open for extension),这意味着程序对扩展是开放的,当我们的应用要增加需求时,可以对其模块进行扩展,使其满足新的需求。这就是我们要做的“开”的原则。
其次,“闭”指的是对修改关闭(close for modification),这意味着功能扩展时,我们不能对我们程序原来的模块代码进行修改,这样的好处可以方便我们维护我们的代码。这就是“闭”的原则。

2、接口隔离原则:
这里我们主要讲的是接口:
接口是面向对象一个最为重要的概念之一,所以的接口就是把事物行为抽象出来,它是事物的一个特性,比如我们可以说“会走的”这个接口,就是抽象了走这个概念。他和抽象类有比较大的区别,抽象类一般是抽象一个物体基本属性概念,比如说抽象一个“人”,人又分男人、女儿。java不支持多继承,而可以实现多个接口,所以接口比抽象类使用起来更加的灵活。
接口讲完了,接下来,我们讲讲“隔离”吧

“Clients should not be forced to depend upon interfaces that they don't use”——客户端不应该依赖它不需用的接口
“The dependency of one class to another one should depend on the smallest possible interface”——类间的依赖关系应该建立在最小的接口上

这里接口隔离的两个基本定义,如何理解这两句话呢,我的理解是要尽量把我们的接口职责细分化,让每个接口最好只负责一个工作,引入这个接口就是完成这个功能就没有了,没有其它的累赘。我们不要把接口设计成一个功能繁多的接口,让一个接口干几件事,这样就违背了接口隔离的原则。就比如“会走的”这个接口,我们里面只需抽象“走”这个行为就行,不要再加个”飞”这个行为来污染这个接口。

3,知道最少原则(迪米特法则)
就是迪米特法则,这里面有句话叫:talk only to your immediate friends,翻译过来就是只和你的朋友交流,在这个原则下有我们的中介者模式,我们只通过中介者模式和其他人打交道。这样可以降低两个类之间的耦合性。让每个内减少对其他类的依赖,因此能比较容易的分割模块,让每个模块独立出来,知道最少原则,表明尽量不要直接和其它内类打交道,最好通过第三方转发我们的需求。

4,里氏替换原则。
这里我们要了解多态和抽象概念,改原则就是对着两个概念的总结。其实他们就是出现一个任何基类可以出现的地方,子类一定可以出现。简而言之,一句话,要继承可以,但是不要修改你父类方法的功能,原来那些,之后还是那些。说土一点,就是你老爸姓什么,你还是姓什么。(这个说明写了忘记保存了坑)

5,合成/聚合复用原则。
这里,首先也用一句话说明下,就是新品装旧酒,充分利用好之前的对象,来实现需的功能。举个例子:假如你已经写好了一个计算加法的对象,写好了一个计算减法的对象,现需求是要一个能计算加减法的对象,这时候,你就不要再重新写一次加法运算和减法运算了,之前把之前写好的两个对象组合起来就可以变成现有的功能了。

6,依赖倒置原则。

还是一句话,依赖抽象,不依赖实现。我是理想主义者,不是现实主义者。

转载于:https://my.oschina.net/studyjun/blog/349406