轻松掌握Java建造者模式
作者:断了联系 发布时间:2023-11-06 15:24:38
标签:Java,建造者模式
建造者模式针对的是复杂对象的构建,比如一个产品有多个部分构成,每个部分都可以单独进行生产,这时候就可以用建造者模式,由Builder构造产品的每个部分,然后又director完成最后产品的组装。
特点:
1、分工更加明确,组建和构造分开,能更好的控制产品的生产。
2、容易扩展,有新的需求的时候,只要实现Builder借口就可以了。
企业级开发和常用框架中的应用:JMail
组成:产品类,抽象建造者,建造者,导演。
产品类:
public class Product{
private String partA;//产品的某个部分,实际开发中可能对应一个类
private String partB;//产品的某个部分,实际开发中可能对应一个类
private String partC;//产品的某个部分,实际开发中可能对应一个类
//构造器及set、get方法
}
抽象建造者:
//也可以是抽象类
public interface Builder{
public void setPartA(String partA);
public void setPartB(String partB);
public void setPartC(String partC);
}
建造者实现类:
public class BuilderImpl implements Builder{
private Product product;
public BuilderImpl(){
product = new Product();
}
public void builderPartA(){
String partA = new String();//模拟工厂方法生产产品的某一个部分
product.setPartA(partA);
}
public void builderPartB(){
String partB = new String();//模拟工厂方法生产产品的某一个部分
product.setPartB(partB);
}
public void setPartC(){
String partC = new String();//模拟工厂方法生产产品的某一个部分
product.setPartC(partC);
}
public Product getProduct(){
return this.product;
}
}
导演类:
public class Director{
private Builder b ;
public Director(Builder newB){
this.b = newB;
}
public void createBuilder(Builder b){
this.b = b;
}
public Product constructProduct(){
b.builderPartA();
b.builderPartB();
b.builderPartC();
}
}
测试类:
public class Demo{
public static void main(String[] args){
Builder b = new BuilderImpl();
Director d = new Director();
d.createBuilder(b);
Product p = c.constructProduct();
}
}
从上面的例子中我们不难发现,如果我们另外实现导演类,完全可能组装出另一个不同的产品,因为导演类控制了产品的组装,同样的,如果我们重新实现抽象构建类,也可能出现完全不同的产品,所以,从中可以发现,构建者模式更加的抽象化,流程化。
相比于抽象工厂模式,不难发现这两者惊人的相似,但为什么还会分出两种不同的设计模式呢,其实重点就在产品的复杂程度和抽象程度上,建造者模式比抽象工厂模式更加的抽象化,复杂化,也就是说建造者模式应对的产品比抽象工厂应对的产品更加复杂,同时,在产品生产流程长更加的抽象。
0
投稿
猜你喜欢
- 一、导入和导出导入:通过解析excel表格中的数据,然后将数据放到一个集合中,接着通过对持久层操作,将数据插入到数据库中,再加载一下页面,从
- 本文实例为大家分享了Java实现简单邮件发送的具体代码,供大家参考,具体内容如下需要的jar包:activation-1.1.1.jarma
- 如下所示://view重绘时回调view.getViewTreeObserver().addOnDrawListener(new OnDra
- 本博文将为您提供自Java 7以来增加的很棒的新功能的示例。我将展示每个Java版本的至少一项重大改进,一直到2020年秋季发布的Java
- 概念Java中的集合就是一种容器,可以容纳不同种类的数据,这些容纳是建立在未知的基础上。优点1.可以动态保存任意多个对象,使用比较方便。2.
- 1. 前言Spring除了IOC和DI,还有另一个杀手锏功能——Spring AOP。AOP是一种面
- 【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1
- SimpleDateFormat进行日期格式化1.为啥要用SimpleDateFormat众所周知,Java中的日期类是Date,然后日期默
- JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展
- 引言我已经一个多星期没碰过电脑了,今日上班,打开电脑的第一件事就是想着写点什么。反正大家都还沉浸在节后的喜悦中,还没进入工作状态,与其浪费时
- 1.概述在本教程中,我们将讨论如何使用Spring Security OAuth和Spring Boot实现SSO - 单点登录。我们将使用
- 一、Java后端使用MultipartFile@PostMapping(value = "/upload")  
- [LeetCode] 205. Isomorphic Strings 同构字符串Given two strings s
- 1)打开idea,开始创建SpringBoot项目2)选择 Spring Initializr ,选择合适的jdk版本,点击Next在操作到
- 简单几步,实现SpringMVC+servlet3.0文件上传功能:第一步:配置web.xml文件中的servlet,添加multipart
- Spring JPA 增加字段执行异常用Spring jpa Entity里面增加了几个字段,但启动报错,提示column Unable t
- 简介AccessibilityService的设计初衷是为了辅助有身体缺陷的群体使用Android应用,它的设计贯穿着Android的控件树
- 前言如今多线程编程已成为了现代软件开发中的重要部分,而并发编程中的线程同步问题更是一道难以逾越的坎。在Java语言中,synchronize
- 这篇文章主要介绍了java property配置文件管理工具框架过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 一、问题描述今天使用SDK Manager将Android SDK的版本更新到了Android 5.1的版本,eclipse创建androi