随笔分类 - 设计模式
设计模式和设计原则
摘要:开闭原则 对扩展开放,对修改关闭,通过抽象定义框架,通过实现扩展细节 依赖倒置原则 高层模块不应该依赖底层模块,二者都应该依赖抽象,抽象不应该依赖细节,细节应该依赖抽象,针对接口编程,而非针对实现编程,需要保证抽象稳定。 抽象通过入参,或者构造方法的方式注入。 单一职责原则 一个类,接口,方法只负责
阅读全文
摘要:定义:组合模式是一个整体部分的概念,可以与聚合对比理解,聚合个体与整体之间并无强依赖关系,不属于一个体系,比如电脑U盘的使用,u盘可以独立存在,不属于电脑结构体系。而组合模式则是所有对象属于一个结构体系,例如菜单的树形结构,上面的每一道菜如果独立出菜单则无法被定位。 生活中公司的组织架构,电脑的文件
阅读全文
摘要:享元模式:定义:实例对象的一种缓存思想,程序运行中一些经常用到,内部态不会改变的实例,放入一个缓存池中,重复使用,避免了同样功能的对象,被重复创建,节省资源。不仅是内存资源,连接资源也同样节约例如String的常量池,数据库的连接池,Integer,Long内部使用的都是这种方式。与注册式的单例区别
阅读全文
摘要:写法:1, 定义一个抽象的类 抽象类里面定义抽象方法2, 定义装饰器 装饰器继承抽象类,引入抽象类属性,构造方法注入,重写抽象类方法,方法执行调用注入的实例重写的方法,装饰器作为一个抽象类存在3, 定义基础模型,与装饰器没有关系,但是继承了最上层的抽象类,写自身业务逻辑4, 定义需要装饰的类,继承装
阅读全文
摘要:1,MVC每一层都是一种门面模式,可以理解成静态代理模式,不过其重点在于功能的封装,静态代理的重点在于功能的前置后置增强。2,门面模式符合迪米特法则,不符合开闭原则,功能过多时也违背了接口单一职责原则。3,门面模式在作为工具包使用的时候,建议设计成单例模式,因为工具包全局只需要一个实例足够了,节省内
阅读全文
摘要:作用:控制对对象的访问,保护对象,增强对象功能动态代理与静态代理简单理解:静态代理是硬编码,动态代理不是JDK动态代理写法及原理分析:写法:1,需要代理的类 要实现一个定义接口,类功能通过接口定义2,代理逻辑handler类,需要实现jdk动态代理接口InvocationHandler,作为代理ha
阅读全文
摘要:克隆模式,就是复制对象,引用属性中若是存在单例模式,只要不进行深克隆,则不会破坏单例模式,基于内存的二进制流进行拷贝,跳过了比较耗时的对象初始化过程,有助于性能提升实现方式 jdk支持 实现CloneAble接口,clone()方法定义在Object中 直接返回super.clone()即可,为浅克
阅读全文
摘要:创建对象,构建的过程支持配置化 只关注最终的结果,是一种链式编程使用场景:StringBuilder,一个对象属性很多,如果构造的入参顺序和个数场景过多的情况下,原始的构造方法排列组合下来会有很多,这种场景比较适合使用建造者模式,过程配置化。与工厂方式的区别,工厂方式注重对象结果 建造者注重对象过程
阅读全文
摘要:克隆模式,就是复制对象,与单例模式天然冲突实现方式 jdk支持 实现CloneAble接口,clone()方法定义在Object中 直接返回super.clone()即可,为浅克隆实现方式浅克隆:对象属性基本类型复制,对象属性引用类型都指向内存相同地址,引用对象为一个,所以修改克隆对象的引用属性值,
阅读全文
摘要:1 简单工厂模式:通过工厂创建实例,不关注实现细节,不符合开闭原则,导致代码结构复杂,不易维护,属于产品型工厂 Calender日历类,LoggerFactory日志类属于简单工厂 2 工厂方法模式:通过抽象,定义工厂,子工厂做实现,由子工厂创建实例,属于工厂规范 工厂型工厂 LogFactory属
阅读全文
摘要:单例模式使用场景,数据源,文件配置,上下文等实现方式:写法:声明静态变量,构造方法私有化,全局唯一访问入口懒汉模式:类加载即实例化,高效,性能好,但是浪费内存,如果量多的话大量消耗内存,影响程序运行,例如启动缓慢饿汉模式:使用时候加载,节省内存,存在线程安全问题,doubleCheck方式解决线程安
阅读全文
摘要:开闭原则 拓展开放 修改关闭,注重点是对抽象的定义,提高软件的复用性和可维护性 单一职责原则 类,接口,方法功能单一,预防代码结构臃肿,复杂,不要存在过多导致功能变化的变更,也是低耦合思想。依赖倒置原则 列举spring中动态注入 高层模块不应该强依赖低层模块,二者都应该依赖抽象。减少类与类之间的耦
阅读全文