用到的设计模式总结--单例模式+工厂方法模式+Builder模式

简介:

一,工厂方法模式和单例模式

工厂方法模式中有一个抽象的工厂接口和一个抽象的产品接口。然后,具体的工厂实现抽象工厂并负责生产具体的产品。由客户端决定 new 哪个具体的工厂,从而生产哪种产品。

因此,与简单工厂模式相比,工厂方法将产品的选择判断交给了客户端。而简单工厂则是通过客户端传过来的生产哪种产品的类型通过 switch-case 在简单工厂中判断要生产哪种产品。

比如,对于Job而言,有编译作业和普通用户作业,如下:

此外,工厂采用单例模式来实现。即只有一个具体的工厂实例。

复制代码
 1 public class CompileJobFactory implements JobFactory {
 2 
 3     //prevents instantiation
 4     private CompileJobFactory() {
 5         
 6     }
 7     
 8     private static volatile CompileJobFactory compileJobFactory;
 9     
10     public static CompileJobFactory createInstance(){
11         if(compileJobFactory == null){
12             synchronized (CompileJobFactory.class) {
13                 if(compileJobFactory == null)
14                     compileJobFactory = new CompileJobFactory();
15             }
16         }
17         return compileJobFactory;
18     }
19      //other method
20 }
复制代码

注意:第8行的 volatile关键字。这样可以避免内存的”乱序写入“导致创建多个实例的情形。尽管已经使用了synchronized,但是还得用 volatile修饰单例引用。参考

所谓”乱序写入“,在这里就是:先将 compileFactory 变量赋值,然后再创建对象。(正常顺序是先创建好CompileFactory对象后,再将 compileFactory指向该对象)

 

这样,在客户端,可以这样来使用工厂模式:可以看出,由客户端判断 创建哪种类型的工厂,进而创建何种类型的产品。

复制代码
1         if(type.equals("0")){
2             jobFactory = CompileJobFactory.createInstance();
3             job = jobFactory.createJob(jsonStr);
4         }else if(type.equals("1")){
5             jobFactory = CommonJobFactory.createInstance();
6             job = jobFactory.createJob(jsonStr);
7         }
复制代码

 

二,构造者(Builder)模式

对于每个Job都有一份 作业配置对象 与之对应。而生成每种作业的配置流程都是一样的:包括三部分:版本配置、集群配置、和自定义配置。因此,可以用一个抽象类Builder定义好整个创建流程,再用Director类负责指挥创建哪种作业的配置。

 

复制代码
 1 public class JobConfigDirector {
 2 
 3     private JobConfigBuilder jobConfig;
 4 
 5     public JobConfigDirector(JobConfigBuilder jobConfig) {
 6         this.jobConfig = jobConfig;
 7     }
 8 
 9     public String createJobConfig() {
10         return jobConfig.versionConfig().append(jobConfig.clusterConfig())
11                 .append(jobConfig.customeConfig()).toString();
12     }
13 }
复制代码

 

JobConfigDirector director = new JobConfigDirector(new CommonJobBuilder(appPath));
String jobConfig = director.createJobConfig();

在客户端,把CommonJobBuilder对象传递给JobConfigDirector,告诉它去创建 某种作业配置类型就可以了。


本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/p/5613475.html,如需转载请自行联系原作者

相关文章
|
1月前
|
设计模式 前端开发 搜索推荐
前端必须掌握的设计模式——模板模式
模板模式(Template Pattern)是一种行为型设计模式,父类定义固定流程和步骤顺序,子类通过继承并重写特定方法实现具体步骤。适用于具有固定结构或流程的场景,如组装汽车、包装礼物等。举例来说,公司年会节目征集时,蜘蛛侠定义了歌曲的四个步骤:前奏、主歌、副歌、结尾。金刚狼和绿巨人根据此模板设计各自的表演内容。通过抽象类定义通用逻辑,子类实现个性化行为,从而减少重复代码。模板模式还支持钩子方法,允许跳过某些步骤,增加灵活性。
102 11
|
6天前
|
设计模式
「全网最细 + 实战源码案例」设计模式——模式扩展(配置工厂)
该设计通过配置文件和反射机制动态选择具体工厂,减少硬编码依赖,提升系统灵活性和扩展性。配置文件解耦、反射创建对象,新增产品族无需修改客户端代码。示例中,`CoffeeFactory`类加载配置文件并使用反射生成咖啡对象,客户端调用时只需指定名称即可获取对应产品实例。
65 40
|
7天前
|
设计模式 关系型数据库
「全网最细 + 实战源码案例」设计模式——简单工厂模式
简单工厂模式是一种创建型设计模式,通过工厂类根据传入参数创建不同类型的对象,也称“静态工厂方法”模式。其结构包括工厂类、产品接口和具体产品类。优点是封装性强、代码复用性好;缺点是扩展性差,增加新产品时需修改工厂类代码,违反开闭原则。适用于对象种类较少且调用者无需关心创建细节的场景。
43 19
|
5天前
|
设计模式 Java
「全网最细 + 实战源码案例」设计模式——生成器模式
生成器模式(Builder Pattern)是一种创建型设计模式,用于分步骤构建复杂对象。它允许用户通过控制对象构造的过程,定制对象的组成部分,而无需直接实例化细节。该模式特别适合构建具有多种配置的复杂对象。其结构包括抽象建造者、具体建造者、指挥者和产品角色。适用于需要创建复杂对象且对象由多个部分组成、构造过程需对外隐藏或分离表示与构造的场景。优点在于更好的控制、代码复用和解耦性;缺点是增加复杂性和不适合简单对象。实现时需定义建造者接口、具体建造者类、指挥者类及产品类。链式调用是常见应用方式之一。
40 12
|
7天前
|
设计模式 关系型数据库
「全网最细 + 实战源码案例」设计模式——工厂方法模式
简单工厂模式是一种创建型设计模式,通过一个工厂类根据传入参数创建不同类型的产品对象,也称“静态工厂方法”模式。其结构包括工厂类、产品接口和具体产品类。适用于创建对象种类较少且调用者无需关心创建细节的场景。优点是封装性强、代码复用性好;缺点是扩展性差,增加新产品时需修改工厂类代码,违反开闭原则。
34 15
|
1月前
|
设计模式 存储 前端开发
前端必须掌握的设计模式——单例模式
单例模式是一种简单的创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。适用于窗口对象、登录弹窗等场景,优点包括易于维护、访问和低消耗,但也有安全隐患、可能形成巨石对象及扩展性差等缺点。文中展示了JavaScript和TypeScript的实现方法。
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
37 2
|
2月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
51 4
|
2月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
|
2月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
33 0