一、设计原则
- 开闭原则:对扩展开放,对修改关闭。
- 里氏代换原则:父类可以被子类代替,即继承。
- 依赖倒转原则:针对接口编程,依赖于抽象而不依赖于具体。
- 接口隔离原则:使用多个隔离的接口来降低耦合。
- 迪米特法则:一个实体应当尽量少地与其它实体间发生相互作用,使得系统功能模块相互独立。
- 合成复用原则:尽量使用合成/聚合的方式,而不是使用继承,继承容易破坏类的封装性。
二、设计模式
- 工厂模式:常用的工厂模式是静态工厂,利用static方法,作为一种类似于常见的工具类Utils等辅助效果,一般情况下工厂类不需要实例化。
- 抽象工厂模式:一个基础接口定义了功能,每个实现接口的子类就是产品,然后定义一个工厂接口,实现了工厂接口的就是工厂,这时候,接口编程的优点就出现了,我们可以新增产品类(只需要实现产品接口),只需要同时新增一个工厂类,客户端就可以轻松调用新产品的代码。
单例模式:一般采用内部类机制来实现。
public final class SingleDemo { private SingleDemo() { } public static SingleDemo getSingleInstance() { return Inner.instance; } private static final class Inner { private static final SingleDemo instance; static { instance = new SingleDemo(); System.out.println("Inner is called only once!"); } } }
- 建造者模式:建造者模式。
- 原型模式:即通过克隆方式来创建新的实例。
- 适配器模式:分为类适配和对象适配,目的是兼容新旧接口。
- 装饰模式:利用组合并实现组合类的接口,同时在具体实现中加入新的逻辑,目的是进行功能扩展。
- 代理模式:可以对旧功能进行代理,用一个代理类调用原有的方法,且对产生的结果进行控制。
- 外观模式:为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。
- 桥接模式。
- 组合模式:可以表示层次结构或部分和整体结构一样的数据。
- 享元模式:使用共享对象的方法,用来尽可能减少内存使用量以及分享资讯。
- 过滤器模式:使用不同的标准来过滤一组对象。
- 责任链模式。
- 命令模式:是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
- 解释器模式:提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。
- 中介者模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
- 备忘录模式:保存一个对象的某个状态,以便在适当的时候恢复对象。
- 观察者模式:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。
- 状态模式:类的行为是基于它的状态改变的。
- 空对象模式。
- 策略模式:一个类的行为或其算法可以在运行时更改。
- 模板模式:一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
- 访问者模式:通过这种方式,元素的执行算法可以随着访问者改变而改变。