用到的设计模式总结--单例模式+工厂方法模式+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,如需转载请自行联系原作者

相关文章
|
10天前
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
|
5天前
|
设计模式 前端开发 Java
19:Web开发模式与MVC设计模式-Java Web
19:Web开发模式与MVC设计模式-Java Web
15 4
|
8天前
|
设计模式 安全 Java
【设计模式学习】单例模式和工厂模式
【设计模式学习】单例模式和工厂模式
|
8天前
|
设计模式 安全 Java
|
10天前
|
设计模式 消息中间件 Java
Java 设计模式:探索发布-订阅模式的原理与应用
【4月更文挑战第27天】发布-订阅模式是一种消息传递范式,被广泛用于构建松散耦合的系统。在 Java 中,这种模式允许多个对象监听和响应感兴趣的事件。
27 2
|
10天前
|
设计模式 存储 安全
Java 设计模式:深入单例模式的理解与应用
【4月更文挑战第27天】单例模式是一种常用的设计模式,在 Java 开发中扮演着重要角色。此模式的主要目的是保证一个类只有一个实例,并提供一个全局访问点。
18 0
|
13天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
13天前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
|
13天前
|
设计模式 安全 Java
[设计模式Java实现附plantuml源码~创建型] 确保对象的唯一性~单例模式
[设计模式Java实现附plantuml源码~创建型] 确保对象的唯一性~单例模式
|
29天前
|
设计模式 SQL 算法
设计模式了解哪些,模版模式
设计模式了解哪些,模版模式
21 0