Java中基本的设计模式

Posted Panda_Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中基本的设计模式相关的知识,希望对你有一定的参考价值。

1. 设计模式的七大原则

开闭原则
单一职责原则
里氏代换原则
依赖倒转原则
接口隔离原则
合成/聚合复用原则
迪米特原则

2. 单例模式

JVM中控制一个类只有一个实例—单例模式。
链接: 参考黑马程序员基础篇的单例设计模式.
链接: 龙哥的单例设计模式博客补充知识.

实现方式:饿汉式、懒汉式、双检锁懒汉式、内部类懒汉式

2.1 饿汉式

1 有三个要点:私有构造函数,设置静态变量,定义获取静态变量的方法
并不是第一次Singleton1.getInstance()创建对像。

2 测试举例

3 通过反射破坏单例
首先获得Singleton类型,通过getDeclaredConstructor()得到无参的构造方法.进而将构造函数设置为公有的。

4 预防反射破坏单例有解决办法

5 反序列化破坏单例
首先把对象转化为字节流,再把字节流还原成一个对象。

解决办法 :增加一个readResolver()函数。

6 Unsafe(JDK内置类) 破坏对象

2.2 懒汉式单例


考虑多线程调用getInstance(),会存在单例的构造函数调用多次
解决办法:在获取静态变量的方法上添加修饰符:synchornized. (加锁)

2.3 优化懒汉式—双检索DCL

判断两次if (INSTANCE == NULL) (优化懒汉式)

双检索:必须加一个volatile 修饰静态变量

2.4 内部类懒汉式

把对象的创建放在静态代码块 可解决线程安全问题
内部类可访问内部外的私有对象

2.5 了解jdk中有哪些地方体现了单例模式

Runtime类—饿汉式

双检锁懒汉式 System类中有一个Console静态变量

集合工具类Conlections
获取空的集合,会涉及以empty打头的类。

3. 代理模式

4. 工厂方法模式

5. 抽象模式

6. 模板方法模式

7. 责任链模式

以上是关于Java中基本的设计模式的主要内容,如果未能解决你的问题,请参考以下文章