设计模式
文章平均质量分 79
CarlosXu14
日常分享代码心得,勿吐槽
展开
-
Mybatis源码解读--9种设计模式总结
虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式。Mybatis至少遇到了以下的设计模式的使用:Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementB...原创 2020-01-14 14:22:37 · 600 阅读 · 0 评论 -
Builder模式和工厂模式的区别
1、Builder模式Builder模式的定义是“将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。”,它属于创建类模式,一般来说,如果一个对象的构建比较复杂,超出了构造函数所能包含的范围,就可以使用工厂模式和Builder模式,相对于工厂模式会产出一个完整的产品,Builder应用于更加复杂的对象的构建,甚至只会构建产品的一个部分。在Mybatis环境的初始化过程中...原创 2020-01-13 14:25:59 · 2153 阅读 · 0 评论 -
单例模式实现的五种方法
饿汉式(线程安全,高效率,但不能实现延迟加载)/** * 测试饿汉式单例模式 * @author CarlosXu */public class HungrySingleton { //类初始化时立即加载对象,加载类时是天然线程安全的,没有延时加载的优势 private static HungrySingleton hungrySingleton=new HungrySingl...原创 2019-08-01 09:19:42 · 98 阅读 · 0 评论 -
使用反射和反序列化破解单例模式以及如何阻止
单例实现类,这里以懒加载举例(因为枚举自带天然防反射和反序列化,所以这两种方法对枚举实现单例模式无效)/** * 测试懒汉式单例模式 * * @author CarlosXu */public class LazySingleton implements Serializable { // 类初始化时不创建对象,有延时加载的优势 private static LazySin...原创 2019-08-01 09:24:35 · 150 阅读 · 0 评论 -
动态代理的实现
创建接口public interface Star { void talk(); void sing(); void charge();}创建接口实现类public class RealStar implements Star { @Override public void talk() { // TODO Auto-generated method stub...原创 2019-08-01 16:41:26 · 123 阅读 · 0 评论 -
GOF23--策略模式strategy
本质:分离算法,选择实现不适用策略模式的弊端:/** * 实现起来比较容易,符合一般开发人员的思路 * 假如,类型特别多,算法比较复杂时,整个条件语句的代码就变得很长,难于维护。 * 如果有新增类型,就需要频繁的修改此处的代码! * 不符合开闭原则! * @author Administrator * */public class TestStrategy { publi...原创 2019-08-01 21:51:50 · 130 阅读 · 0 评论 -
GOF23--模板方法模式(template method)
使用场景:实现一个算法,整体结构很固定,但对某些特定的功能是易变的,将特定的功能抽象出来,供子类实现。(子类继承父类时,必须要实现父类的抽象方法)定义模板方法:public abstract class BankTemplateMethod { //具体方法 public void takeNumber(){ System.out.println("取号排队"); } p...原创 2019-08-01 22:17:46 · 137 阅读 · 0 评论