Java建造者模式
建造者模式
建造者模式适用场景:
建造一个复杂的对象适用,将构建对象的过程分开,每个类单独构造对象的一部分,最后组装起来,返回我们需要的对象。
下面的例子主要讲解构造一个飞船
Demo:
//要获得的对象,但是各个组件要拆分开,让对应的类去实现
class AirShip {
private OrbitaModule orbitaModule;//轨道舱
private Engine engine; //发动机
private EscapeTower escapeTower;//逃逸塔
public OrbitaModule getOrbitaModule() {
return orbitaModule;
}
public void setOrbitaModule(OrbitaModule orbitaModule) {
this.orbitaModule = orbitaModule;
}
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
public EscapeTower getEscapeTower() {
return escapeTower;
}
public void setEscapeTower(EscapeTower escapeTower) {
this.escapeTower = escapeTower;
}
}
class OrbitaModule{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public OrbitaModule(String name) {
super();
this.name = name;
}
}
class Engine{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Engine(String name) {
super();
this.name = name;
}
}
class EscapeTower{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public EscapeTower(String name) {
super();
this.name = name;
}
}
public interface AirShipBuilder {
Engine builderEngine();
OrbitaModule builderOrbitaModule();
EscapeTower builderEscapeTower();
}
//创建返回对象的接口
public interface AirShipDirector {
AirShip directAirShip();
}
//组装对象的实现类
public class AirShipBuilderImpl implements AirShipBuilder{
@Override
public Engine builderEngine() {
System.out.println("构建发动机");
return new Engine("发动机");
}
@Override
public OrbitaModule builderOrbitaModule() {
System.out.println("构建逃逸塔");
return new OrbitaModule("逃逸塔");
}
@Override
public EscapeTower builderEscapeTower() {
System.out.println("构建轨道舱");
return new EscapeTower("轨道舱");
}
}
//返回对象的实现类
public class AirShipDirectorImpl implements AirShipDirector{
//创建一个构造组件的接口对象,此处可以使用工厂模式进行修改
private AirShipBuilder airShipBuilder;
public AirShipDirectorImpl(AirShipBuilder airShipBuilder) {
super();
this.airShipBuilder = airShipBuilder;
}
@Override
public AirShip directAirShip() {
Engine builderEngine = airShipBuilder.builderEngine();
OrbitaModule builderOrbitaModule = airShipBuilder.builderOrbitaModule();
EscapeTower builderEscapeTower = airShipBuilder.builderEscapeTower();
AirShip ship = new AirShip();
ship.setEngine(builderEngine);
ship.setEscapeTower(builderEscapeTower);
ship.setEscapeTower(builderEscapeTower);
return ship;
}
}
//客户端调用
public class Client {
public static void main(String[] args) {
AirShipDirector airShipDirector = new AirShipDirectorImpl(new AirShipBuilderImpl());
AirShip directAirShip = airShipDirector.directAirShip();
System.out.println(directAirShip);
}
}
建造者模式主要就是将建造飞船的过程简单的拆分开,让构建飞船的不同的组件让不同的类去完成,此处就可以和工厂模式和单例模式相结合,让开发变得更加清晰。
Java建造者模式的更多相关文章
- Java 建造者模式 简单的理解
建造者模式 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式,使用多个简单的对象一步一步构建成一个复杂的对象. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表 ...
- 今儿直白的用盖房子为例,给你讲讲Java建造者模式
摘要:建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式.它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象. 本 ...
- java 建造者模式
package de.bvb.test3; /** * 建造者模式: 假如一个类有4个字段,每个字段或者每几个字段的组合都需要设置为构造函数,构造函数就比较麻烦 * 而且如果再加一个字段进去也不好拓展 ...
- Java建造者模式(思维导图)
图1 建造者模式[点击查看大图] 基本的知识点已在思维导图中,下面是demo 1,Builder 为创建一个产品对象的各个部件指定抽象接口 public interface PersonBuilder ...
- Java设计模式-建造者模式(Builder)
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [构建与表示分离,同构建不同表示] 与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指 ...
- Java设计模式04:常用设计模式之建造者模式(创建型模式)
1. Java之建造者模式(Builder Pattern) (1)概念: 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [ 构建与表示分离, 同构建不同表示 ] ...
- java设计模式之四建造者模式(Builder)
工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到 ...
- 建造者模式(Java与Kotlin版)
前文推送 设计模式 简单工厂模式(Java与Kotlin版) 工厂方法模式(Java与Kotlin版) 抽象工厂模式(Java与Kotlin版) Kotlin基础知识 Kotlin入门第一课:从对比J ...
- 我的Java设计模式-建造者模式
在未上大学之前,一直有个梦想"I have a dream!",就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女.咳咳~~虽然现在没实现我的dre ...
随机推荐
- Scala脚本化-Ammonite
Scala语言定义: Scala combines object-oriented and functional programming in one concise, high-level lang ...
- 从壹开始前后端分离 39 || 想创建自己的dotnet模板么?看这里
缘起 开工是利啦!哈喽各位小伙伴,周三好呀,新的一年又开始了,老张给大家做个榜样,新的一年也要好好学习哟,这两天闲的无事就整理整理了这个系列的 Github 代码,增加了一个英文的 README ,然 ...
- 残差网络(Residual Networks, ResNets)
1. 什么是残差(residual)? “残差在数理统计中是指实际观察值与估计值(拟合值)之间的差.”“如果回归模型正确的话, 我们可以将残差看作误差的观测值.” 更准确地,假设我们想要找一个 $x$ ...
- asp.net core系列 55 IS4结合Identity密码保护API
一.概述 OAuth 2.资源所有者密码授权允许客户端(Client项目)向令牌服务(IdentityServer项目)发送用户名和密码,并获取代表该用户的访问令牌.本篇将IS4结合asp.net c ...
- Python进阶:设计模式之迭代器模式
在软件开发领域中,人们经常会用到这一个概念——“设计模式”(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一本圣经级的书籍<设计模式:可复用面向对象软件的基础 ...
- 卷积神经网络之AlexNet
由于受到计算机性能的影响,虽然LeNet在图像分类中取得了较好的成绩,但是并没有引起很多的关注. 知道2012年,Alex等人提出的AlexNet网络在ImageNet大赛上以远超第二名的成绩夺冠,卷 ...
- 3.JAVA-方法重载,类的封装,构造/析构方法
1.方法重载 和C++的函数重载一样,主要是实现多个相同的函数名,但是参数表不同. 参数表不同主要有以下几种 1) 参数个数不同 2) 参数类型不同 3) 参数顺序不同 2.类和对象 类class 用 ...
- Git 中 .gitignore 的配置语法
一.前言 在日常的开发中,当我们需要将一个项目提交到 Git 时,并不是所有的文件都需要提交,比如一些自动生成的文件,类似于 .idea 文件.class 文件等,这时候就可以使用.gitignore ...
- nginx通过域名访问项目(不接项目名称),cookie丢失问题详解
最近搞了个域名,想用它直接去访问Tomcat上部署的项目,开始一直必须加上项目名称,经过短暂配置,成功了. 访问一次,到达登陆页面,结果死活登录不进去,一直在登陆界面,原来是由于cookie丢失,现配 ...
- React 基础入门
React 起源于 Facebook 内部项目,是一个用来构建用户界面的 Javascript 库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React 把每一个组件当成了一个状态机,组 ...