设计模式之美
文章平均质量分 58
设计模式
이숙한
这个作者很懒,什么都没留下…
展开
-
原型模式.
原型模式的原理与应用如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式(Prototype Design Pattern),简称原型模式。原型模式的实现方式:深拷贝和浅拷贝浅拷贝和深拷贝的区别在于:浅拷贝只会复制图中的索引(散列表),不会复制数据(SearchWord 对象)本身。相反,深拷贝不仅仅会复制索引,还会复原创 2021-09-15 23:52:12 · 125 阅读 · 0 评论 -
建造者模式
为什么需要建造者模式?如果存在下面情况中的任意一种,我们就要考虑使用建造者模式了。我们把类的必填属性放到构造函数中,强制创建对象的时候就设置。如果必填的属性有很多,把这些必填属性都放到构造函数中设置,那构造函数就又会出现参数列表很长的问题。如果我们把必填属性通过set() 方法设置,那校验这些必填属性是否已经填写的逻辑就无处安放了。如果类的属性之间有一定的依赖关系或者约束条件,我们继续使用构造函数配合 set()方法的设计思路,那这些依赖关系或约束条件的校验逻辑就无处安放了。如果我们希望创建不可原创 2021-09-15 23:38:22 · 121 阅读 · 0 评论 -
工厂模式(下)
工厂模式和 DI 容器有何区别?1.DI 容器底层最基本的设计思路就是基于工厂模式的。DI 容器相当于一个大的工厂类,负责在程序启动的时候,根据配置(要创建哪些类对象,每个类对象的创建需要依赖哪 些其他类对象)事先创建好对象。当应用程序需要使用某个类对象的时候,直接从容器中获取即可。2.工厂模式中,一个工厂类只负责某个类对象或者某一组相关类对象(继承自同一抽 象类或者接口的子类)的创建,而 DI 容器负责的是整个应用中所有类对象的创建。3.DI 容器负责的事情要比单纯的工厂模式要多。DI 容器的核心原创 2021-09-07 23:44:45 · 145 阅读 · 0 评论 -
工厂模式(上)
简单工厂(Simple Factory)public class RuleConfigSource { public RuleConfig load( String ruleConfigFilePath) { String ruleConfigFileExtension =getFileExtension(ruleConfigFilePath); IRuleConfigParser parser = null; if ("json".equalsIgnoreCase(ruleC原创 2021-09-07 23:29:46 · 84 阅读 · 0 评论 -
单例模式(下)
如何理解单例模式中的唯一性?单例模式创建的对象是进程唯一的。单例类在老进程中存在且只能存在一个对象,在新进程中也会存在且只能存在一个对 象。而且,这两个对象并不是同一个对象,这也就说,单例类中对象的唯一性的作用范围是 进程内的,在进程间是不唯一的。如何实现一个线 程唯一的单例呢?“进程唯一”指的是进程内唯一,进程间不唯一。“线程唯一”指的是线程内唯 一,线程间可以不唯一。我 们通过一个 HashMap 来存储对象,其中 key 是线程 ID,value 是对象。这样我们就可以做到,不同的线程对应原创 2021-09-07 23:10:18 · 118 阅读 · 0 评论 -
单例模式(中):单例模式的弊端
单例对 OOP 特性的支持不友好public class Order { public void create(...) { //... long id = IdGenerator.getInstance().getId(); //... } } public class User { public void create(...) { // ... long id = IdGenerator.getInstance().getId(); //....原创 2021-09-07 23:00:40 · 529 阅读 · 0 评论 -
单例模式(上)
为什么要使用单例?一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例 模式。能解决两种问题:实战案例一:处理资源访问冲突public class Logger { private FileWriter writer; public Logger() { File file = new File("/Users/wangzheng/log.txt"); writer = new FileWriter(file, true); //tr原创 2021-09-07 22:52:06 · 75 阅读 · 0 评论