java建造者模式简化_建造者模式(Java与Kotlin版)

前文推送

设计模式

Kotlin基础知识

1. 定义

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

2. 结构

Product:产品角色;

Director:指挥者,利用具体建造者创建产品;

AbstractBuilder:抽象建造者,定义抽象的建造方法;

ConcreteBuilder:具体建造者,实现建造方法;

3. 代码

3.1 Java

Product:

class Product {

private String name;

private int price;

public void setName(String name_arg) {

name = name_arg;

}

public void setPrice(int price_arg) {

price = price_arg;

}

public void show() {

System.out.println("名字: " + name + ", 价格: " + price);

}

}

除了两个属性的set方法,还定义了一个打印属性的show方法。

Director:

class Director {

AbstractBuilder builder;

public void setBuilder(AbstractBuilder builder_arg) {

builder = builder_arg;

}

public Product construct() {

builder.buildName();

builder.buildPrice();

return builder.getProduct();

}

}

通过设置的建造者,创建产品实例并返回。

AbstractBuilder:

abstract class AbstractBuilder {

abstract public void buildName();

abstract public void buildPrice();

abstract public Product getProduct();

}

定义了三个抽象方法,用于设置产品属性及获取实例。

ConcreteBuilder1与ConcreteBuilder2:

class ConcreteBuilder1 extends AbstractBuilder {

private Product product;

public ConcreteBuilder1() {

product = new Product();

}

public void buildName() {

product.setName("套餐1");

}

public void buildPrice() {

product.setPrice();

}

public Product getProduct() {

return product;

}

}

class ConcreteBuilder2 extends AbstractBuilder {

private Product product;

public ConcreteBuilder2() {

product = new Product();

}

public void buildName() {

product.setName("套餐2");

}

public void buildPrice() {

product.setPrice();

}

public Product getProduct() {

return product;

}

}

具体建造者,实现产品的创建。

输出:

java建造者模式简化_建造者模式(Java与Kotlin版)_第1张图片

3.2 Kotlin

Product:

class Product {

private var name: String? = null

fun setName(name_arg : String) {

name = name_arg

}

fun setPrice(price_arg : Int) {

price = price_arg

}

fun show() {

println("名字: $name, 价格: $price")

}

}

Director:

class Director {

private var builder: AbstractBuilder? = null

fun setBuilder(builder_arg: AbstractBuilder) {

builder = builder_arg

}

fun construct(): Product {

builder?.buildName()

builder?.buildPrice()

return builder!!.getProduct()

}

}

AbstractBuilder:

abstract class AbstractBuilder {

abstract fun buildName()

abstract fun buildPrice()

abstract fun getProduct(): Product

}

ConcreteBuilder1与ConcreteBuilder2:

class ConcreteBuilder1 : AbstractBuilder() {

private val product: Product

init {

product = Product()

}

override fun buildName() {

product.setName("套餐1")

}

override fun buildPrice() {

product.setPrice()

}

override fun getProduct(): Product {

return product

}

}

class ConcreteBuilder2 : AbstractBuilder() {

private val product: Product

init {

product = Product()

}

override fun buildName() {

product.setName("套餐2")

}

override fun buildPrice() {

product.setPrice()

}

override fun getProduct(): Product {

return product

}

}

输出同上。

4. 优缺点

4.1 优点

在建造者模式中, 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象;

每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者, 用户使用不同的具体建造者即可得到不同的产品对象 ;

可以更加精细地控制产品的创建过程 。将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程;

增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合“开闭原则”。

4.2 缺点

建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制;

如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

5. 适用场景

需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员属性;

需要生成的产品对象的属性相互依赖,需要指定其生成顺序;

对象的创建过程独立于创建该对象的类。在建造者模式中引入了指挥者类,将创建过程封装在指挥者类中,而不在建造者类中;

隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。

工厂方法模式(Java与Kotlin版)

前文推送 设计模式 简单工厂模式(Java与Kotlin版) Kotlin基础知识 Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操作 Kotlin入门第三课:数据类型 初次 ...

抽象工厂模式(Java与Kotlin版)

前文推送 设计模式 简单工厂模式(Java与Kotlin版) 工厂方法模式(Java与Kotlin版) Kotlin基础知识 Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操 ...

设计模式之第11章-建造者模式(Java实现)

设计模式之第11章-建造者模式(Java实现) “那个餐厅我也是醉了...”“怎么了?”“上菜顺序啊,竟然先上甜品,然后是冷饮,再然后才是菜什么的,无语死了.”“这个顺序也有人这么点的啊.不过很少就是 ...

简单工厂模式(Java与Kotlin版)

Kotlin基础知识的学习,请参考之前的文章: Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操作 Kotlin入门第三课:数据类型 初次尝试用Kotlin实现Android ...

BuilderPattern(建造者模式)-----Java/.Net

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式

建造者模式与原型模式/builder模式与prototype模式/创建型模式

建造者模式 定义 用于简化复杂对象的创建 JDK中的建造者模式 java.lang.StringBuilder中的append()方法,每次调用后返回修改后的对象本身. public StringBu ...

Java设计模式——建造者模式(创建型模式)

概述   建造者模式也称为生成器模式,是一种对象创建型模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象.   建造者模式意在为重叠构造 ...

Java设计模式-建造者模式(Builder)

将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [构建与表示分离,同构建不同表示] 与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指 ...

Java设计模式04:常用设计模式之建造者模式(创建型模式)

1. Java之建造者模式(Builder Pattern) (1)概念:       将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [ 构建与表示分离, 同构建不同表示 ] ...

随机推荐

10000 Reasons(Matt Redman)

这是一首很感动的主内歌曲,听了无首次,还是很感动,这里把歌词贴出来,一方面是为了记忆歌词,另一方面是为以后怀念记忆.(20:44:38) Bless the lord,oh my soul oh m ...

获取项目中文件,存放到Debug中。

说起这个,还真是费了一般功夫. 说个最简单的方法: 第一步:把需要生成到Debug中的文件放到项目中(注意:当前文件夹目录是什么样的,存放到Debug中也是什么样) 第二部:设置文件属性中 复制到输出 ...

HighCharts使用心得

HighCharts使用心得 前言: 之前很早的一个项目中使用过highcharts,感觉挺方便的,图表类型也比较丰富,而且还支持数据的下钻,但是如果投入商业使用的话还会有一些版权的问题,所以后来就使 ...

ArrayList源码

1.首先看对ArrayList的定义:   public class ArrayList extends AbstractList implements Lis ...

MyEclipse中无法将SVN检出来的项目部署到tomcat中

自己遇到的小问题  : 要以web项目方式从svn上倒下来才可以部署到tomcat下检出步骤: myEclipse -->File-->new-->other-->svn--& ...

ng-repeat 遍历同值数组导致的报错

http://blog.csdn.net/tyust512/article/details/50370624

jsp 行动标签

jsp行动标签 签.它影响JSP执行时的功能. 1.include动作标签 或

A1117. Eddington Number

British astronomer Eddington liked to ride a bike. It is said that in order to show off his skill, h ...

VM CentOS 问题汇总

1. 锁定文件失败 / 模块启动失败 如下图问题: 原因分析: 虚拟机为了防止有多虚拟机共用一个虚拟磁盘(就是后 缀为.vmdk那个文件)造成数据的丢失等问题,每次启动虚拟机时会给每个虚拟磁盘加一个磁 ...

Spring切面二使用注解

package com.IC; public interface PhoneBiz { public void buyPhone(int num); //购买手机; public void saleP ...

你可能感兴趣的:(java建造者模式简化)