JAVA设计模式之建造者模式原理与用法详解
作者:迟做总比不做强 发布时间:2022-09-25 19:43:04
标签:JAVA,设计模式,建造者模式
本文实例讲述了JAVA设计模式之建造者模式定义与用法。分享给大家供大家参考,具体如下:
建造者模式:将复杂对象的构造与它的实现相分离,让相同的构建过程可以创建不同的对象。
适用场合:
复杂对象的算法应该独立于该对象的组成部分或当构造过程允许被构造不同的对象时。
组成角色:
1 创建者(Builder)接口:为创建一个对象的对应部件所指定抽象接口。
2 具体创建者(ConcreteBuilder):实现Builder的接口以构造对象的各个部件。
3 具体创建者管理对象(Director):使用Builder接口的对象。
4 复杂产品对象(Product):被构造的复杂对象。
/**
* 生产汽车:创建者Builder接口
* @description:
* @date 2016-1-21 下午1:15:39
*/
public interface CarBuilder {
void carRoof();//生产车顶
void carBottom();//生产车底盘
void carWheel();//生产车轮
Car buildCar();
}
/**
* 具体创建对象ConcreteBuilder:白色汽车
* @description:
* @date 2016-1-21 下午1:16:22
*/
public class WhiteCar implements CarBuilder {
Car car;
public WhiteCar() {
car = new Car();
}
@Override
public void carRoof() {
car.setRoof("制造白色汽车---车顶");
}
@Override
public void carBottom() {
car.setBottom("制造白色汽车---车底");
}
@Override
public void carWheel() {
car.setWheel("制造白色汽车---车轮");
}
@Override
public Car buildCar() {
// TODO Auto-generated method stub
return car;
}
}
/**
* 具体创建者管理对象(Director),建造者
* @description:
* @author ldm
* @date 2016-1-21 下午1:17:12
*/
public class CarDirector {
public Car constructPerson(CarBuilder carBuilder) {
carBuilder.carRoof();
carBuilder.carBottom();
carBuilder.carWheel();
return carBuilder.buildCar();
}
}
/**
* 最终生产的'复杂产品'对象
* @description:
* @date 2016-1-21 下午1:22:28
*/
public class Car {
private String roof;// 车顶
private String bottom;// 车底
private String wheel;// 车轮
public String getRoof() {
return roof;
}
public void setRoof(String roof) {
this.roof = roof;
}
public String getBottom() {
return bottom;
}
public void setBottom(String bottom) {
this.bottom = bottom;
}
public String getWheel() {
return wheel;
}
public void setWheel(String wheel) {
this.wheel = wheel;
}
}
测试代码:
public class Test {
public static void main(String[] args) {
CarDirector carDirector = new CarDirector();
Car car = carDirector.constructPerson(new WhiteCar());
System.out.println(car.getRoof());
System.out.println(car.getBottom());
System.out.println(car.getWheel());
System.out.println("----整个车子就完成了!--");
}
}
打印结果:
制造白色汽车—车顶
制造白色汽车—车底
制造白色汽车—车轮
—-整个车子就完成了!–
更多java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。


猜你喜欢
- Spring Data Elasticsearch提供了ElasticsearchTemplate工具类,实现了POJO与elasticse
- 废话不多说了,直接给大家贴代码,具体代码如下所示://菜单树形结构 public JSONArray treeMenuList(JSONAr
- 首先非空变量和可空变量的区别:// name为不可为空的变量, 不能赋值为null ,若有判断 if(name==null) 无意义,因为肯
- 1.editplus1.1 官方下载https://www.editplus.com/官方下载最新的64位2 .解压就可以使用2.1 vsc
- 本文实例为大家分享了Unity实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下一、演示二、实现思路创建每一个方块可移动到的位置点,可以
- @SuppressWarnings 注解@SuppressWarnings: 抑制编译器警告如下,可以看到idea中有警告的颜色标注当我们不
- 创建maven父子工程时遇到一个问题,当子工程的名称前缀和父工程的名称一样时,子工程会出现一系列的问题。比如我的父工程名称是microser
- 先给出具体代码(当前目录为:D:\pro):package org.test;public class TestJava{ pu
- 1、概述本文通过手动实现迭代器来了解foreach语句的本质。2、使用foreach语句遍历集合在C#中,使用foreach语句来遍历集合。
- 本文介绍了Webview与ScrollView的滚动兼容及留白处理,分享给大家,具体如下:背景开发中我们经常会遇到使用网页来显示图文内容,而
- webservice restful接口跟soap协议的接口实现大同小异,只是在提供服务的类/接口的注解上存在差异,具体看下面的代码,然后自
- 本文实例讲述了Android使用httpPost向服务器发送请求的方法。分享给大家供大家参考,具体如下:import java.util.L
- 写在前面: 从一个窗体的创建显示,再到与用户的交互,最后窗体关闭,这中间经历过了一系列复杂的过程,本文将从Winform应用程序中的Prog
- 一、为何使用内部类内部类提供了更好的封装,只有外部类能访问内部类内部类可以独立继承一个接口,不受外部类是否继承接口影响内部类中的属性和方法即
- 创建新的项目的时候,文件名一直追加,不分层对于刚用idea的小白,这个问题困扰了我好几天了,幸好现在还不怎么敲代码,下面给一个详细的解决方案
- 1. Spring 是什么我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是一个开源框架,有
- gRPCgRPC是由 google开发的一个高性能、通用的开源RPC框架,主要面向移动应用开发且基于HTTP/2协议标准而设计,同时支持大多
- 本文实例讲述了java GUI编程之paint绘制操作。分享给大家供大家参考,具体如下:import java.awt.*;public c
- XuLIeHua类库using System;using System.Collections; using System.Co
- 在textView添加超链接,有两种方式,第一种通过HTML格式化你的网址,一种是设置autolink,让系统自动识别超链接。 代码如下: