Java的设计模式
一些解决编程中某些通用性问题的好的解决方案,按照套路来编程
设计模式分为:
- 创建型模式
- 工厂方法模式
- 建造者模式
- 抽象工厂模式
- 原型模式
- 单例模式
- 结构型模式
- 桥接模式
- 代理模式
- 享元模式
- 外观模式
- 装饰器模式
- 组合模式
- 适配器模式
- 行为型模式
- 备忘录模式
- 状态模式
- 解释器模式
- 中介者模式
- 观察者模式
- 策略模式
- 模板方法模式
- 访问者模式
- 迭代子模式
- 责任链模式
针对现有的场景和需求,选择相应的设计模式
单例模式
有且只有唯一的一个实例来产生工作的时候.
要点:
1.有且只有一个实例
2.类可自行创造实例
3.自行向整个程序提供这个实例
实现:
1.私有构造方法
2.类内有静态私有对象
3.公有静态方法来创建并返回这个唯一的实例对象
饿汉式
对象在创建的过程中实例化,
由于在类加载的时候就完成了实例化,所以即使开启多个线程去调用实例对象,实例对象也是唯一的,所以他是线程安全的
package com.hungry;
public class HungryDemo {
// 私有构造
private HungryDemo() {
}
//创建私有静态实例 饿汉式,在加载类的时候就创建出来了
private static HungryDemo instance = new HungryDemo();
//公有的静态接口,可以返回这个实例
public static HungryDemo getInstance() {
return instance;
}
}
懒汉式
对象在静态的公有方法中实例化,什么时候调用什么时候实例化这个唯一的对象
因为在调用方法的时候才完成实例化,存在线程风险
解决方法:
- 同步锁
- 双重矫检锁
- 静态内部类
- 枚举
package com.lazy;
public class LazyDemo {
// 私有构造方法
private LazyDemo() {
}
// 私有静态属性存放instance
private static LazyDemo instance = null;
// 外部公开的静态方法获取实例
public static LazyDemo getInstance() {
// 这里判断是否已经进行过实例化
if (instance == null) {
instance = new LazyDemo();
}
return instance;
}
}
场景
- 创建对象的时候占用资源过多,但是同时又需要用到这个对象的时候
- 对系统内资源要求统一的读写,如都写配置信息
- 当多个实例的存在可能引起程序的逻辑错误的时候,如号码生成器