Java设计模式——建造者模式——步骤规范 结果可控

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 本文目录1. 背景2. 原始建造模式3. 正儿八经的建造者模式4. 作用

1. 背景

要理解建造者模式,首先要理解农民工建筑模式。


农民工建筑模式就是靠经验,对怎么盖这个屋子心里大体有个数,优点就是自由灵活成本低,效果就是你很难掌控其中的每一个环节。比如建筑施工前必须先安装防尘网和保护施工人员的拦网,这个基本规定都有可能无法落实。这种模式我称之为原始建造模式。


建造者模式就厉害了,它是制度化运营,必须得有个人现场指挥,这个人非常了解建造流程,而且要求所有施工人员必须按照流程来。这样肯定成本高了点,毕竟至少多了一个人要给他发工资,但是确实在规范性、安全性方面得到提高。这种是正儿八经的建造者模式。


2. 原始建造模式

在我们日常的项目中,有一个事情跟这个模型很像,就是数据库连接对象的创建。


按照正常流程就是:


//mysql建造

           Class.forName("com.mysql.jdbc.Driver");

           String url = "jdbc:mysql://127.0.0.1:3306/test";

           String name = "root";

           String pwd = "root";

           conn = DriverManager.getConnection(url,name ,pwd);

//oracle建造

           Class.forName("oracle.jdbc.driver.OracleDriver");

           String url = "jdbc:oracle:thin:@//127.0.0.1:1521/orcl";

           String name = "root";

           String pwd = "root";

           conn = DriverManager.getConnection(url,name ,pwd);


如果中间少了哪一步,比如name忘了赋值,这个可能就要有问题了。而且流程高度相似,完全可以请一个专业人员来管控这个流程。此处用建造者模式来改造上述流程。


3. 正儿八经的建造者模式

OK,首先我们确定我们建造的对象是Connection,建造行为可定义为ConnectionBuilder抽象类,因为不管什么Connection建造都是可以由这个抽象类描述的:


/**

* 建造行为接口

*/

public abstract class ConnectionBuilder {

protected String driver;

protected String url;

protected String name;

protected String password;


public abstract void buildDriver();

public abstract void buildUrl();

public abstract void buildName();

public abstract void buildPassword();

public abstract Connection createConnection() throws Exception;

}


然后我们请一个指挥官,这个指挥官非常了解Connection建造流程,只要他出手,必按流程走:


/**

* 建造指挥官

*/

public class ConnectionDirector {

public Connection construct(ConnectionBuilder builder) throws Exception {

 builder.buildDriver();

 builder.buildUrl();

 builder.buildName();

 builder.buildPassword();

 return builder.createConnection();

}

}


然后来了个具体的建造任务,是要建造一个Mysql的连接对象,而且任务清单也出来了:


public class MysqlConnectionBuilder extends ConnectionBuilder {

       //每个方法表示建造过程中一个步骤/任务

@Override

public void buildDriver() {

 this.driver = "com.mysql.jdbc.Driver";

}


@Override

public void buildUrl() {

 this.url = "jdbc:mysql://127.0.0.1:3306/test";

}


@Override

public void buildName() {

 this.name = "root";

}


@Override

public void buildPassword() {

 this.password = "root";

}


@Override

public Connection createConnection() throws Exception {

 Class.forName(this.driver);

 return DriverManager.getConnection(url, name, password);

}


}


OK,此时如果我们自己建,比如直接调用createConnection,就会忽略流程,可能有问题。


所以我们利用建造者模式,请指挥官来建:


public static void main(String[] args) throws Exception {

 ConnectionDirector director=new ConnectionDirector();

 Connection mysqlCon=director.construct(new MysqlConnectionBuilder());

}


4. 作用

用了指挥官之后,看似麻烦了,实际可拓展性更好了,比如再来个oracle、sqlserver数据库,照样给你建了,而且保证正确。


实际上设计模式就是通过语法的一些限制,保证一些事情的安全顺利执行。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
设计模式 Java
【JAVA基础篇教学】第十四篇:Java中设计模式
【JAVA基础篇教学】第十四篇:Java中设计模式
|
4天前
|
设计模式 算法 Java
设计模式在Java开发中的应用
设计模式在Java开发中的应用
16 0
|
5天前
|
缓存 安全 前端开发
来聊聊Java项目分层规范
本文讨论了Java项目的分层规范,强调了分层的重要性以避免代码不易扩展和职责边界模糊。作者分享了阿里提出的六层分层模型(开放接口层、终端显示层、Web层、Service层、Manager层、Mapper层)以及对应的领域模型(DO、DTO、VO、query)。同时,提出了简化版的分层规约,以提高开发效率。作者是CSDN Java博客专家,维护者之一的Java Guide项目,并提供了个人项目结构示例。文章鼓励读者关注其公众号以获取更多交流机会。
20 4
|
11天前
|
设计模式 前端开发 Java
19:Web开发模式与MVC设计模式-Java Web
19:Web开发模式与MVC设计模式-Java Web
21 4
|
11天前
|
设计模式 存储 前端开发
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
25 4
|
11天前
|
设计模式 缓存 监控
JAVA设计模式之结构型模式
结构模型:适配器模型、桥接模型、过滤器模型、组合模型、装饰器模型、外观模型、享受元模型和代理模型。
21 3
|
15天前
|
设计模式 算法 Java
Java基础教程(19)-设计模式简述
【4月更文挑战第19天】设计模式是软件设计中反复使用的代码设计经验,旨在提升代码的可重用性、可扩展性和可维护性。23种模式分为创建型、结构型和行为型三类。创建型模式如工厂方法、抽象工厂、建造者、原型和单例,关注对象创建与使用的分离。结构型模式涉及对象组合,如适配器、装饰器、外观等,增强结构灵活性。行为型模式专注于对象间职责分配和算法合作,包括责任链、命令、观察者等。设计模式提供标准化解决方案,促进代码交流和复用。
|
15天前
|
Java
Java 编程风格与规范:提升代码质量与可维护性
【4月更文挑战第27天】在软件开发过程中,良好的代码规范和一致的编程风格对于团队协作、代码可读性和可维护性至关重要。Java 作为一种流行的编程语言,拥有丰富的编码规范和最佳实践。
29 2
|
15天前
|
设计模式 Java
Java 设计模式:混合、装饰器与组合的编程实践
【4月更文挑战第27天】在面向对象编程中,混合(Mixins)、装饰器(Decorators)和组合(Composition)是三种强大的设计模式,用于增强和扩展类的功能。
21 1
|
15天前
|
设计模式 消息中间件 Java
Java 设计模式:探索发布-订阅模式的原理与应用
【4月更文挑战第27天】发布-订阅模式是一种消息传递范式,被广泛用于构建松散耦合的系统。在 Java 中,这种模式允许多个对象监听和响应感兴趣的事件。
35 2