Java设计模式

总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
其实还有两类:并发型模式和线程池模式
Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。
  单例模式有以下特点:
  1、单例类只能有一个实例。
  2、单例类必须自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。
  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。选择单例模式就是为了避免不一致状态,避免政出多头
饿汉式和懒汉式区别
从名字上来说,饿汉和懒汉,
饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了,
而懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。
另外从以下两点再区分以下这两种方式:

1、线程安全:
饿汉式天生就是线程安全的,可以直接用于多线程而不会出现问题,
懒汉式本身是非线程安全的,为了实现线程安全有几种写法,分别是上面的1、2、3,这三种实现在资源加载和性能方面有些区别。


2、资源加载和性能:
饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成,
而懒汉式顾名思义,会延迟加载,在第一次使用该单例的时候才会实例化对象出来,第一次调用时要做初始化,如果要做的工作比较多,性能上会有些延迟,之后就和饿汉式一样了。
至于1、2、3这三种实现又有些区别,
第1种,在方法调用上加了同步,虽然线程安全了,但是每次都要同步,会影响性能,毕竟99%的情况下是不需要同步的,
第2种,在getInstance中做了两次null检查,确保了只有第一次调用单例的时候才会做同步,这样也是线程安全的,同时避免了每次都同步的性能损耗
第3种,利用了classloader的机制来保证初始化instance时只有一个线程,所以也是线程安全的,同时没有性能损耗,所以一般我倾向于使用这一种。

什么是线程安全?
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
或者说:一个类或者程序所提供的接口对于线程来说是原子操作,或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题,那就是线程安全的。
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 第2章 里氏替换原则 2.1 爱恨纠葛的父子关系 2.2 纠纷不断,规则压制 2.3 最佳实践 第3章 依赖倒置原则 3.1 依赖倒置原则的定义 3.2 言而无信,你太需要契约 3.3 依赖的三种写法 3.4 最佳实践 第4章 接口隔离原则 4.1 接口隔离原则的定义 4.2 美女何其多,观点各不同 4.3 保证接口的纯洁性 4.4 最佳实践 第5章 迪米特法则 5.1 迪米特法则的定义 5.2 我的知识你知道得越少越好 5.3 最佳实践 第6章 开闭原则 6.1 开闭原则的定义 6.2 开闭原则的庐山真面目 6.3 为什么要采用开闭原则 6.4 如何使用开闭原则 6.5 最佳实践 第二部分 我惹了谁——真刀实枪篇 第7章 单例模 7.1 我是皇帝我独苗 7.2 单例模的定义 7.3 单例模的应用 7.4 单例模的扩展 7.5 最佳实践 第8章 工厂方法模 8.1 女娲造人的故事 8.2 工厂方法模的定义 8.3 工厂方法模的应用 8.3.1 工厂方法模的优点 8.3.2 工厂方法模的使用场景 8.4 工厂方法模的扩展 8.5 最佳实践 第9章 抽象工厂模 9.1 女娲的失误 9.2 抽象工厂模的定义 9.3 抽象工厂模的应用 9.3.1 抽象工厂模的优点 9.3.2 抽象工厂模的缺点 9.3.3 抽象工厂模的使用场景 9.3.4 抽象工厂模的注意事项 9.4 最佳实践 第10章 模板方法模 10.1 辉煌工程—制造悍马 10.2 模板方法模的定义 10.3 模板方法模的应用 10.4 模板方法模的扩展 10.5 最佳实践 第11章 建造者模 11.1 变化是永恒的 11.2 建造者模的定义 11.3 建造者模的应用 11.4 建造者模的扩展 11.5 最佳实践 第12章 代理模 12.1 我是游戏至尊 12.2 代理模的定义 12.3 代理模的应用 12.3.1 代理模的优点 12.3.2 代理模的应用 12.4 代理模的扩展 12.4.1 普通代理 12.4.2 强制代理 12.4.3 代理是有个性的 12.4.4 虚拟代理 12.4.5 动态代理 12.5 最佳实践 第13章 原型模 13.1 个性化电子账单 13.2 原型模的定义 13.3 原型模的应用 13.3.1 原型模的优点 13.3.2 原型模的使用场景 13.4 原型模的注意事项 13.4.1 构造函数不会被执行 13.4.2 浅拷贝深拷贝 13.4.3 clone与final两个冤家 13.5 最佳实践 第14章 中介者模 14.1 进销存管理是这个样子的吗? 14.2 中介者模的定义 14.3 中介者模的应用 14.4 中介者模的实际应用 14.5 最佳实践 第15章 命令模 15.1 项目经理也难当 15.2 命令模的定义 15.3 命令模的应用 15.3.1 命令模的优点 15.3.2 命令模的缺点 15.3.3 命令模的使用场景 15.4 命令模的扩展 15.4.1 未讲完的故事 15.4.2 反悔问题 15.5 最佳实践 第16章 责任链模 16.1 古代妇女的枷锁—“三从四德” 16.2 责任链模的定义 16.3 责任链模的应用 16.3.1 责任链模的优点 16.3.2 责任链模的缺点 16.3.3 责任链模的注意事项 16.4 最佳实践 第17章 装饰模 17.1 罪恶的成绩单 17.2 装饰模的定义 17.3 装饰模应用 17.3.1 装饰模的优点 17.3.2 装饰模的缺点 17.3.3 装饰模的应用 17.4 最佳实践 第18章 策略模 18.1 刘备江东娶妻,赵云他容易吗 18.2 策略模的定义 18.3 策略模的应用 18.3.1 策略模的优点 18.3.2 策略模的缺点 18.3.3 策略模的应用 18.3.4 策略模的注意事项 18.4 策略模的扩展 18.5 最佳实践 第19章 适配器模 19.1 业务发展—上帝才能控制 19.2 适配器模的定义 19.3 适配器模的应用 19.3.1 适配器模的优点 19.3.2 适配器模的应用 19.3.3 适配器模的注意事项 19.4 适配器模的扩展 19.5 最佳实践 第20章 迭代器模 20.1 整理项目信息—苦差事 20.2 迭代器模的定义 20.3 迭代器模的应用 20.4 最佳实践 第21章 组合模 21.1 公司的人事架构是这样的吗 21.2 组合模的定义 21.3 组合模的应用 21.3.1 组合模的优点 21.3.2 组合模的缺点 21.3.3 组合模的应用 21.3.4 组合模的注意事项 21.4 组合模的扩展 21.4.1 真实的组合模 21.4.2 透明的组合模 21.4.3 组合模的遍历 21.5 最佳实践 第22章 观察者模 22.1 韩非子身边的卧底是谁派来的 22.2 观察者模的定义 22.3 观察者模的应用 22.3.1 观察者模的优点 22.3.2 观察者模的缺点 22.3.3 观察者模的应用 22.3.4 观察者模的注意事项 22.4 观察者模的扩展 22.4.1 Java世界中的观察者模 22.4.2 项目中真实观察者模 22.4.3 订阅发布模型 22.5 最佳实践 第23章 门面模 23.1 我要投递信件 23.2 门面模的定义 23.3 门面模的应用 23.3.1 门面模的优点 23.3.2 门面模的缺点 23.3.3 门面模的应用 23.4 门面模的注意事项 23.4.1 一个子系统可以有多个门面 23.4.2 门面不参与子系统内的业务逻辑 23.5 最佳实践 第24章 备忘录模 24.1 如此追女孩子,你还不乐 24.2 备忘录模的定义 24.3 备忘录模的应用 24.3.1 备忘录模的应用 24.3.2 备忘录模的注意事项 24.4 备忘录模的扩展 24.4.1 clone方的备忘录 24.4.2 多状态的备忘录模 24.4.3 多备份的备忘录 24.4.4 封装得更好一点 24.5 最佳实践 第25章 访问者模 25.1 员工的隐私何在? 25.2 访问者模的定义 25.3 访问者模的应用 25.3.1 访问者模的优点 25.3.2 访问者模的缺点 25.3.3 访问者模的应用 25.4 访问者模的扩展 25.4.1 统计功能 25.4.2 多个访问者 25.4.3 双分派 25.5 最佳实践 第26章 状态模 26.1 城市的纵向发展功臣—电梯 26.2 状态模的定义 26.3 状态模的应用 26.3.1 状态模的优点 26.3.2 状态模的缺点 26.3.3 状态模的应用 26.3.4 状态模的注意事项 26.4 最佳实践 第27章 解释器模 27.1 四则运算你会吗 27.2 解释器模的定义 27.3 解释器模的应用 27.3.1 解释器模的优点 27.3.2 解释器模的缺点 27.3.3 解释器模使用的场景 27.3.4 解释器模的注意事项 27.4 最佳实践 第28章 享元模 28.1 内存溢出,司空见惯 28.2 享元模的定义 28.3 享元模的应用 28.3.1 享元模优点缺点 28.3.2 享元模的应用 28.4 享元模的扩展 28.4.1 线程安全的问题 28.4.2 性能平衡 28.5 最佳实践 第29章 桥梁模 29.1 我有一个梦想…… 29.2 桥梁模的定义 29.3 桥梁模的应用 29.3.1 桥梁模的优点 29.3.2 桥梁模的应用 29.3.3 桥梁模的注意事项 29.4 最佳实践 第三部分 谁的地盘谁做主—模PK篇 第30章 创建类模大PK 30.1 工厂方法模VS建造者模 30.1.1 按工厂方法建造超人 30.1.2 按建造者模建造超人 30.1.3 最佳实践 30.2 抽象工厂模VS建造者模 30.2.1 按抽象工厂模生产车辆 30.2.2 按建造者模生产车辆 30.2.3 最佳实践 第31章 结构类模大PK 31.1 代理模VS装饰模 31.1.1 代理模 31.1.2 装饰模 31.1.3 最佳实践 31.2 装饰模VS适配器模 31.2.1 按装饰模描述丑小鸭 31.2.2 按适配器模实现丑小鸭 31.2.3 最佳实践 第32章 行为类模大PK 32.1 命令模VS策略模 32.1.1 策略模实现压缩算法 32.1.2 命令模实现压缩算法 32.1.3 小结 32.2 策略模VS状态模 32.2.1 策略模实现人生 32.2.2 状态模实现人生 32.2.3 小结 32.3 观察者模VS责任链模 32.3.1 责任链模实现DNS解析过程 32.3.2 触发链模实现DNS解析过程 32.3.3 小结 第33章 跨战区PK 33.1 策略模VS桥梁模 33.1.1 策略模实现邮件发送 33.1.2 桥梁模实现邮件发送 33.1.3 最佳实践 33.2 门面模VS中介者模 33.2.1 中介者模实现工资计算 33.2.2 门面模实现工资计算 33.2.3 最佳实践 33.3 包装模群PK 33.3.1 代理模 33.3.2 装饰模 33.3.3 适配器模 33.3.4 桥梁模 33.3.5 最佳实践 第四部分 完美世界—混编模 第34章 命令模+责任链模 34.1 搬移UNIX的命令 34.2 混编小结 第35章 工厂方法模+策略模 35.1 迷你版的交易系统 35.2 混编小结 第36章 观察者模+中介者模 36.1 事件触发器的开发 36.2 混编小结 第37章 规格模 37.1 规格模的实现 37.2 最佳实践 第38章 MVC框架 38.1 MVC框架的实现 38.1.1 MVC的系统架构 38.1.2 模型管理器 38.1.3 值栈 38.1.4 视图管理器 38.1.5 工具类 38.2 最佳实践 附录:23个设计模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值