七大设计原则
-
开闭原则:是设计模式的总原则。开闭原则就是说对拓展开放,对修改关闭,模块应该在尽量不修改代码的前提下进行拓展。开闭原则要求我们尽量通过拓展来实现变化,尽可能少地改变已有模块。
- 提高代码复用性
- 提高代码可维护性
-
单一职责原则:简单来说就是保证设计类、接口、方法做到功能单一,权责明确。指的是一个类或者模块有且只有一个改变的原因。
- 单一职责可以降低类的复杂性、提高代码可读性、可维护性
-
里式替换原则:所有引用基类的地方必须能够透明地使用其子类的对象
- 里式替换可以提高代码复用性、子类继承父类时自动继承到父类的属性方法
- 提高代码可拓展性
-
依赖倒置原则:程序要依赖于抽象接口,不要依赖于具体实现。简单来说就是要求对抽象进行编程,不要对具体实现进行编程。
-
接口隔离原则:客户端不应该依赖它不需要的接口,类间的依赖关系应该建立在最小接口上。
-
迪米特法则:也叫最少知识原则,一个实体应当尽可能少得与其他实体发生相互作用,初衷在于降低类之间的耦合
-
合用复用原则:通过将已有的对象纳入新对象中,作为新对象的成员对象来实现的,新对象可以调用已有对象的功能,从而达到复用。
单例模式:在一个系统中,一个类有且仅有一个对象实例
饿汉式的单例模式在初始化的时候即创建了对象,在需要的时候可以直接返回该对象实例。
/** * @ClassName Singleton2 * @Description 饿汉式设计模式,直接在类创建的时候就生成静态成员变量供外部使用,即预先加载法,所以不存在线程安全性的问题 * @Author zhangshao * @Date 2020/2/29 10:25 **/ public class Singleton2 { //使用类变量来缓存创建过的实例 private static final Singleton2 instance = new Singleton2(); private Singleton2(){}; public static Singleton2 getInstance(){ return instance; } public static void main(String[] args) { Singleton2 s1 = Singleton2.getInstance(); Singleton2 s2 = Singleton2.getInstance(); System.out.println(s1 == s2); } }
懒汉式的单例模式
/** * @ClassName Singleton3 * @Description 单例设计模式 单线程模式下的懒汉式单例模式,双检锁+volatile实现 * @Author zhangshao * @Date 2020/3/4 15:35 **/ public class Singleton3 { private static volatile Singleton3 s = null; private Singleton3(){} public static Singleton3 getInstance(){ if(null == s){ synchronized (Singleton3.class){ if(null == s){ s= new Singleton3(); } } } return s; } public static void main(String[] args) { Singleton3 s1 = Singleton3.getInstance(); Singleton3 s2 = Singleton3.getInstance(); System.out.println(s1 == s2); } }
单例模式的使用场景:创建一个对象需要消耗太多的资源或者在一个系统中不适合创建多个对象实例的情况下,采用单例模式解决。
Instance instance =new Instance()
- 在堆内存中分配对象的存储空间
- 在堆内存上初始化对象
- 设置instance指向刚分配的内存地址