摘要:场景假设宏基笔记本仅由和内存组成,其中生产和内存的工序可以独立出来交由各个厂商制造。具体代码如下品种普通方法实现建造者模式实现内部类实现建造者品种客户端调用,语义化跃然纸上。普通方法实现母一号土猪黑色建造者模式实现公黑珍珠白色
描述:一个复杂的对象由多个部件组成,每个部件可以独立生成,部件的组装过程交由指引者完成。
场景:假设宏基笔记本仅由CPU和内存组成,其中生产CPU和内存的工序可以独立出来交由各个OEM厂商制造。
实现:
笔记本:
class AcerComputer {
String cpu;
String memory;
AcerComputer(String cpu, String memory) {
this.cpu = cpu;
this.memory = memory;
}
}
定义一个建造者:
interface Builder {
public String createCPU();
public String createMemory();
}
定义一个OEM,负责生成CPU、内存:
class OEM implements Builder {
@Override
public String createCPU() {
return "CPU";
}
@Override
public String createMemory() {
return "内存";
}
}
定义宏基公司,下定单让OEM制造CPU和内存,它自己组装成电脑:
class AcerCompany {
private Builder builder;
private String name;
AcerCompany(Builder builder) {
this.builder = builder;
this.name = "宏基公司";
}
public AcerComputer create() {
String cpu = builder.createCPU();
String memory = builder.createMemory();
return new AcerComputer(cpu, memory);
}
}
客户端调用:
public static void main(String[] args) {
Builder builder = new OEM();
AcerCompany acerCompany = new AcerCompany(builder);
// 宏基电脑出厂了
AcerComputer computer = acerCompany.create();
}
==============邪恶的分割线==========================================
利用建造者模式写构造方法:
如果一个对象的构造参数非常多,可以考虑使用建造者模式构造参数,从而使得构造的过程更加语义化。
举个“萝卜”,我们要构造一头猪,它的属性有雌雄、年龄、品种、肤色等。具体代码如下:
class Pig {
String sex;
int age;
String varieties; // 品种
String color;
// 普通方法实现
Pig(String sex, int age, String varieties, String color) {
this.sex = sex;
this.age = age;
this.varieties = varieties;
this.color = color;
}
// 建造者模式实现
Pig(Builder builder) {
this.sex = builder.sex;
this.age = builder.age;
this.color = builder.color;
this.varieties = builder.varieties;
}
// 内部类实现建造者
static class Builder {
String sex;
int age;
String varieties; // 品种
String color;
public Builder sex(String sex) {
this.sex = sex;
return this;
}
public Builder age(int age) {
this.age = age;
return this;
}
public Builder varieties(String varieties) {
this.varieties = varieties;
return this;
}
public Builder color(String color) {
this.color = color;
return this;
}
public Pig build() {
return new Pig(this);
}
}
}
客户端调用,语义化跃然纸上。
public static void main(String[] args) {
// 普通方法实现
Pig pig1 = new Pig("母", 10, "一号土猪", "黑色");
// 建造者模式实现
Pig pig2 = new Pig.Builder().sex("公").age(5).varieties("黑珍珠").color("白色").build();
}
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/64028.html
摘要:注意事项声明函数时候处理业务逻辑区分和单例的区别,配合单例实现初始化构造函数大写字母开头推荐注意的成本。简单工厂模式使用一个类通常为单体来生成实例。 @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 一直对设计模式不太懂,花了一下午加一晚上的时间,好好的看了看各种设计模式,并总结了一下。 设计模式简介 设计模式概念解读 设计模式的发展与在JavaScript中的应用 ...
摘要:建造者模式建造者模式将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示。工厂模式主要是为了创建对象实例或者类簇抽象工厂,关心的是最终产出创建的是什么,而不关心创建的过程。 建造者模式 建造者模式将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示。工厂模式主要是为了创建对象实例或者类簇(抽象工厂),关心的是最终产出(创建)的是什么,而不关心创建...
摘要:建造者模式实现建造者模式实现创建抽象建造者类创建具体建造者类。建造者模式使用场景建造者模式使用场景相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式。1、什么是建造者模式 Separate the construction of a complex object from its representation so that the same constructi...
1、什么是建造者模式Separate the construction of a complex object from its representation so that the same construction process can create different representations.将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示。 说人话:将构...
阅读 4740·2023-04-25 20:41
阅读 3085·2023-04-25 16:40
阅读 1733·2021-09-23 11:44
阅读 1494·2021-09-10 10:51
阅读 2354·2021-09-07 09:59
阅读 2204·2019-12-27 12:08
阅读 846·2019-08-30 15:44
阅读 3638·2019-08-30 11:08