**
建造者模式
**
1.是什么
先来说下官方定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示.它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。
其实就是DIY嘛,
2.用在哪
1.组装过电脑吧
由 主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标,萝卜等部件组装而成最少的钱做最多的事
2.打过游戏吧
从剑灵,天刀,骑马与砍杀2,捏脸系统都是一大主流,美的都大同小异,丑的那叫别具一格
- 创建的对象较复杂,由多个部件构成,各部件面临着复杂的变化,但构件间的建造顺序是稳定的。
- 创建复杂对象的算法独立于该对象的组成部分以及它们的装配方式,即产品的构建过程和最终的表示是独立的。
3.结构
建造者(Builder)模式由产品、抽象建造者、具体建造者、指挥者等 4 个要素构成,现在我们来分析其基本结构和实现方法。
1. 模式的结构
建造者(Builder)模式的主要角色如下。
-
产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个滅部件。
-
抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。
-
具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。
-
指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。
4.怎么用
现场捏脸
Product
//产品角色
public class Person {
private String eyes;//眼
private String ears;//耳
private String mouth;//口
private String nose;//鼻
public void setEyes(String eyes) {
this.eyes = eyes;
}
public void setNose(String nose) {
this.nose = nose;
}
public void setMouth(String mouth) {
this.mouth = mouth;
}
public void setEars(String ears) {
this.ears = ears;
}
public void display()
{
//显示容貌
}
}
抽象建造者 bulid
public abstract class Builder {
//创建对象
Person person=new Person();
public abstract void bulideyes();
public abstract void bulidears();
public abstract void bulidmouth();
public abstract void bulidnose();
public Person getresult(){
return new Person();//获取结果
}
}
具体建造者 ConcerteBuilder
public class ConcerteBuilder extends Builder {
@Override
public void bulideyes() {
person.setEars("组装上卡姿兰大眼睛");
System.out.println("组装上卡姿兰大眼睛");
}
@Override
public void bulidears() {
person.setEyes("组装精灵一般的耳朵");
System.out.println("组装精灵一般的耳朵");
}
@Override
public void bulidmouth() {
person.setMouth("组装樱桃小嘴巴");
System.out.println("组装樱桃小嘴巴");
}
@Override
public void bulidnose() {
person.setNose("组装高挺大鼻梁");
System.out.println("组装高挺大鼻梁");
}
}
玩家 指挥者 Director
//游戏玩家,具体指挥者
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
//角色构建与组装方法
public Person construct() {
builder.bulidears();
builder.bulideyes();
builder.bulidmouth();
builder.bulidnose();
return builder.getresult();
}
}
Main方法看看是个怎样的
public class Main {
public static void main(String[] args) {
Builder builder=new ConcerteBuilder();//下载客户端 按照自己需求捏脸
Director director=new Director(builder);//进入界面
Person result = director.construct();
result.display();
}
}
该模式的主要优点如下:
- 各个具体的建造者相互独立,有利于系统的扩展。
- 客户端不必知道产品内部组成的细节,便于控制细节风险。
其缺点如下:
- 产品的组成部分必须相同,这限制了其使用范围。
- 如果产品的内部变化复杂,该模式会增加很多的建造者类。
组装精灵一般的耳朵
组装上卡姿兰大眼睛
组装樱桃小嘴巴
组装高挺大鼻梁
拿错了,重来!!