23种设计模式

23种设计模式:
1、简单工厂模式
2、策略模式
3、装饰者模式
4、代理模式
5、工厂模式
6、原型模式
7、模板模式
8、外观模式
9、建造者模式
10、观察者模式
11、抽象工厂模式
12、状态模式
13、适配器模式
14、备忘录模式
15、组合模式
16、迭代器模式
17、单例模式
18、桥接模式
19、命令模式
20、职责链模式
21、中介者模式
22、享元模式
23、解释者模式
24、访问者模式

设计模式六大原则:
1、单一职责原则:单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。
2、开放封闭原则:对于扩展是开放的,对于修改是封闭的。无论模块是多么的"封闭",都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。开放-封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象,然而,对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。
3、依赖倒转原则:抽象不应该依赖细节,细节应该依赖于抽象,说白了就是要针对接口编程,依赖抽象或接口编程。
4、里氏替换原则:只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正的被复用,而子类也能够在父类的基础上增加新的行为。
里氏替换原则:父类引用指向子类对象Person p=new Chinese();(隐式类型转换)
里氏替换原则:定义一个方法的时候,返回类型是父类型,而实际返回是子类型的对象
5、迪米特法则(最少知识原则):如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用,强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限。也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开,其根本思想是强调了类之间的松耦合。
6、合成复用原则

原则是尽量首先使用合成/聚合的方式,而不是使用类继承。

简单工厂模式:
专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。它又称为静态工厂方法模式。
它的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例
适用范围:工厂类负责创建的对象比较少,客户只知道传入了工厂类的参数,对于始何创建对象(逻辑)不关心。

工厂方法模式:在工厂和产品中间增加接口,工厂不再负责产品的创建,由接口针对不同条件返回具体的类实例,由具体类实例去实现


抽象工厂:抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象,如果有新的对象实体,通过反射动态的创建对象实例,用户不需要打开项目改代码,只需要在配置文件中改就好,这样更灵活

适用范围:用来生产不同产品族的全部产品,比如每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品

相同点:

1、提高了程序的可维护性和低耦合性
2、都是为客户调用程序与具体的对象类型之间提供了一个解耦作用,就是说应用程序不关心这个对象是怎么出来的,只关系如何使用这个对象,而且以后就算对象发生变化,那么也不需要修改用户应用程序的代码。

观察者模式:有时又被称为发布-订阅模式,完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。

项目中哪里用到简单工厂和抽象工厂?
搭建框架时,简单工厂发现根据不同的实体还是要改代码,于是抽象出一个抽象工厂类,把变化的对象放入配置文件中,通过反射动态获取一个实例

项目中哪里用到观察者模式?
日志出现错误信息后,而写信息可能写到不同地方去(比如写到文件、数据库里面去),第二同时可能写到多个地方去,
最后我用了两种方式实现,一个用多播委托很容易就实现,另外一个我用面向对象的思想实现的,我定义一个接口ILog,
接口中定义一个写日志的方法,如果写到文本文件中,就让他实现接口并实现接口中的方法,如果写到数据库中去,
也让他实现接口并实现接口中的方法,然后定义一个list集合,类型为ILog,直接将文本文件的类、sql的类加到list集合中去
最后遍历list集合,调用写日志的方法就可以了。

原文地址:https://www.cnblogs.com/xiaoweigogo/p/7794000.html