建造者模式简介
1.建造者模式适用于一个具有较多的零件的复杂产品的创建过程,由于需求的变化,组成这个复杂产品的各个零件经常猛烈变化,但是他们的组合方式却相对稳定。他可以使你分步骤创建复杂的对象。
建造者模式解决的问题
一般当我们遇到一个非常复杂的对象的时候,这个对象里面有非常多的属性。或者有非常多的繁杂的方法的时候,我们就可以使用建造者模式来对这个对象进行指定类型的初始化。比如当你建造房子的时候,房子里面会有各种各样的内容,比如墙壁,灯,电视,电脑,游泳池,冰箱,地板,空调等等内容,而每个房子建造之后里面的内容也不是全部都有的,所以你需要对每一套房子进行指定内容的初始化。
实例
比如当我们遇到这样一种场景,马戏团中,每个动物在不同的表演中,要进行不同的动作。 首先有一个动物的抽象类,每个动物都实现这个抽象类
public abstract class AnymalModel {
//这个参数是各个基本方法执行的顺序
private ArrayList<String> sequence = new ArrayList<>();
//跑了
protected abstract void start();
//停止
protected abstract void stop();
//叫
protected abstract void alarm();
//跳
protected abstract void engineBoom();
//开始表演
final public void run() {
//循环一边,谁在前,就先执行谁
for (String actionName : this.sequence) {
if (actionName.equalsIgnoreCase("start")) {
this.start();
} else if (actionName.equalsIgnoreCase("stop")) {
this.stop();
} else if (actionName.equalsIgnoreCase("alarm")) {
this.alarm();
} else if (actionName.equalsIgnoreCase("engine boom")) {
this.engineBoom();
}
}
}
//把传递过来的值传递到类内
final public void setSequence(ArrayList<String> sequence) {
this.sequence = sequence;
}
}
其次每一个动物对这些抽象类进行实现,每一只动物都有不同的实现。
//小鸟
public class BridMode extends AnmicModel{
//跑了
protected abstract void start(){
System.out.println("小鸟开始跑");
}
//停止
protected abstract void stop(){
System.out.println("小鸟停下来");
}
//叫
protected abstract void alarm(){
System.out.println("小鸟开始叫");
}
//跳
protected abstract void engineBoom(){
System.out.println("小鸟开始跳");
}
}
//7老虎
public class TirgeMode extends AnmicModel{
//跑了
protected abstract void start(){
System.out.println("老虎开始跑");
}
//停止
protected abstract void stop(){
System.out.println("老虎停下来");
}
//叫
protected abstract void alarm(){
System.out.println("老虎开始叫");
}
//跳
protected abstract void engineBoom(){
System.out.println("老虎开始跳");
}
}
此时我们设置一个驯兽员,训练动物在每次表演的不同表演方法
//驯兽员
public abstract PersonBuilder{
//设置动物的一个模型,每一个动物都按照这个方法进行表演
private abstract void setSequence(ArrayList<String> sequence);
private abstract AnymicModel GetAnymicModel();
}
//小鸟的驯兽员
public void BirdBuilder extends PersonBuilder{
Private BridMode birdMode = new BridMode();
public AnymicModel GetAnymicModel(){
return this.bireMode;
}
public setSequence(ArrayList<String> sequence){
this.bireMode.setSequence(sequence);
}
}
//老虎的驯兽员
public void TigerBuilder extends PersonBuilder{
Private TigerMode tigerMode = new TigerMode();
public AnymicModel GetAnymicModel(){
return this.tigerMode;
}
public setSequence(ArrayList<String> sequence){
this.tigerMode.setSequence(sequence);
}
}
class Client {
public static void main(String[] args) {
ArrayList<String> sequence = new ArrayList<String>();
//要求小鸟先叫
sequence.add("engine boom");
//开始表演
sequence.add("start");
//停下来
sequence.add("stop");
BirdBuilder birdBuilder = new BirdBuilder ();
birdBuilder.setSequence(sequence);
BirdModel birdModel = birdBuilder.getBirdModel();
birdModel.run();
}
}
这样在不同的表演场景中,我们都可以使用建造类,来对不同的场景进行封装和设置;
标签:sequence,void,建造,模式,public,protected,ArrayList,设计模式,abstract From: https://blog.51cto.com/u_15585624/7394654