
设计模式概述:
设计模式是GoF(gang of four)提出来的。设计模式是程序员们经过大量的实践总结出来的设计模板。目的是要提高代码的复用性,扩展性,可读性。
一、类之间的关系
1、依赖关系
关系很弱,偶然性,临时性的,常用的场景是A类的方法参数需要使用到B类。
2、关联关系
关联关系是一种强依赖关系。关联关系是长期的,平等的。分类有单向关联,双向关联,自关联。
3、聚合关系
聚合关系是关联关系的一种特例。体现的是整体和部分的关系。整体和部分可以相互相互分离有着自己的生命周期。
4、组合关系
组合关系体现是A contains B,关系比聚合强,也称为强聚合关系。
5、继承关系
6、实现关系(接口)
二、六大原则 –>开闭原则是目标,里氏原则是基础,依赖倒转原则是手段
1、Single Responsibility Principle 单一职责原则
这个原则用来控制类粒度的大小,是高内聚低耦合的指导方针,要求类不能承担过多的职责。一个类承担的职责越多,耦合性就会越高。当该类发生变化时,影响很多其他的类。所以要将这些职责分离。但是分离的太多,会使得类过多,不容易管理。所以要看程序员的经验。
2、Interface Segaregation Principle 接口隔离原则
这个原则和单一职责原则有点类似,单一职责原则针对的是类的粒度客人接口隔离原则针对的是接口的粒度。
一个接口定义一个规范,如果规范定义的范围太广,我们需要将他分割成更小的接口。接口也不能分的过细。
3、open closed principle 开闭原则 最重要 设计目标
该原则是Bertrand Meyer1988年提出的要求设计类时对扩展开放,对修改关闭。当类创建好了以后,我们尽量不要去修改,而是用增加类的方式去代替修改。所以抽象化是开闭原则的关键。这要求我们要降低类之间的耦合,所谓的解耦。当并不代表类之间没有关系。如果一个项目种的类都没有关系了,那就不是一个程序了。由关系,但是关系要解耦、封装。
4、Liskov Substitution Principle 里氏替换原则 –>多态
该原则是Barbara Liskov和Jeannette Wing 在1994年提出。且2008年于Barbara Liskov女士获得了图灵奖。该原则是实现开闭原则的重要方式之一;
多态是里氏的一个应用,Java在编译期,会检查一个程序是否符合里氏替换原则。
该原则的含义为在程序中使用的是父类对象,那么将父类用子类替换调,程序不会包任何错误和异常,反过来不成立,若果程序中使用的是子类对象,不一定能使用父类对象。
应用场景:方法传参时,参数类型时父类,我们可以传入子类。但是如果参数类型时子类,不能传入父类。
程序中尽量使用基类(接口)定义,运行时确定子类类型,替换父类对象。
5、Dependence Inversion Principle 依赖倒转原则
该原则是1996年由Robert.C.Martin提出。抽象不依赖于细节,细节依赖抽象。即面向抽象类/接口编程,不是针对具体子类和实现类编程。
通过该原则我们在子类中定义的方法应该尽量和抽象类保持一致,而不要给出多余的方法,因为抽象类无法调用。
实现依赖倒转原则,我们要针对抽象类和接口编程,将具体的对象注入到其他依赖关系的类中(依赖注入)Dependency Injection(DI)常用的注入方式由三种:构造注入,settter注入,接口注入。
构造注入和Setter注入是指在类中定义抽象类/接口类型的属性。然后通过构造方法和Setter方法传入具体的子类/实现类。而接口注入是在方法形参方法形参,返回值尽量使用父类/接口,在方法调用时传入具体的实现类/子类。
6、Law of Demeter 迪米特原则
迪米特原则又称为最少知识原则(Least Knowledge Principle)。一个实体应该尽少的和其他实体发生关系。这样当我们去修改一个模块的时候就会修改很少的其他模块,扩展会更容易。这样迪米特法则就可以降低系统的耦合度,使得类和类之间保持松散的耦合关系。但是一个应用中不存在类和类的耦合度都是0的情况,如果是这样,程序就废了。
迪米特法则要求只和你的直接朋友通讯,不要和陌生人说话。对于一个对象,他的直接朋友为:
1)、当前对象本身 this
2)、当前对象所创建的对象
3)、当前对象的成员对象
4)、以参数形式传入当前对象的对象
5)、当前对象是一个集合,集合中的对象元素都是朋友
除了以上的都是陌生人。如果一定要和陌生人说话,那可以通过第三者来传达(代理)。
三、设计模式分类
设计模式分为创建型、结构型、行为型
1、创建型
单例模式 Singleton
工厂三姐妹:简单工厂、工厂方法、抽象工厂模式
简单工厂模式 SimpleFactory
工厂方法模式 Factory Method
抽象工厂模式 Abstract Factory
建造者模式Builder
链式调用
原型模式 Prototype
2、结构型
外观模式 Facade
适配器模式Adaper

桥接模式Bridge
组合模式 Composite
代理模式 Proxy
装饰器模式Decorater
享元模式FlyWeight
3、行为型

策略模式 Strategy
观察者模式 Observer
模板模式 Template Method
责任链模式 Chain of Responsibility
迭代器模式 Iterator
命令模式 Command
状态模式 State
备忘录模式 Memento
访问者模式
中介者模式
解释器模式

网友评论