6大原则
总原则:开闭原则,对扩展开放,对修改关闭
- 单一职责
- 里氏替换原则,任何基类可以出现的地方,子类一定可以出现。区分“Has-A”和“Is -A”的区别
- 依赖倒转原则,面向接口编程,依赖于抽象而不依赖于具体
- 接口隔离原则,每个接口中不存在子类用不到却需要实现的方法
- 迪米特法则,一个类对自己依赖的类知道的越少越好,被依赖的类应该做好封装
- 合成复用原则,在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的
工厂模式(创建型)
可以解决的问题
解耦,例如很多类依赖一个A类,那么后期A类中的代码变更,要去所有依赖A类的类中修改代码,这时如果有一个工厂,所有依赖A类的类都去工厂拿A类,那么后期A类中的代码变更,只需要去修改工厂中的代码。
简单工厂模式
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。这违法反了闭包原则,对扩展开放,对修改关闭。
工厂方法模式
考虑到简单工厂违背了闭包原则,所以就有了工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
抽象工厂模式
工厂方法模式是每个工厂只能创建一种产品。而抽象工厂是每个工厂可以创建多种产品。
单例模式(创建型)
单例模式的创建方式有饿汉式和懒汉式。
- 饿汉式:在第一次引用该类的时候就创建对象实例,没有线程安全问题。但是不管实际是否需要,都会创建。
- 懒汉式:只有在第一次使用的时候才创建,这种要考虑到线程安全问题,可以通过synchronized关键字实现双重检查机制来加锁(双重就是先判断一次单例是否为空,再上锁创建对象。如果不加第一次判断,那么每一次都要去走一次synchronized,也是比较耗费性能的。如果将synchronized放在方法上,效率低),或者使用静态内部类实例singleton对象(在类初始化时,别的线程是无法进入的,因此保证了线程安全。)。
适配器模式(结构型)
类适配器,对象适配器,将一个接口转换成客户希望的另一个接口。类适配器通过继承来完成适配,对象适配器则是通过关联来完成。
观察者模式(行为型)
观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。
主要有抽象被观察者和抽象观察者,抽象被观察者中有增加观察者,删除观察者,通知观察者更新消息三个抽象方法,抽象观察者中则有一个更新的抽象方法。