完整设计模式目录见:https://blog.csdn.net/u013523089/article/details/82852049
建造者模式:为了保证对象内部方法的执行顺序(像建造者一样,建造需要保证顺序)
实现:
例:汽车在run时先启动还是先启动引擎
在产品接口中,使用sequence保证start跟engine的顺序
package com.zhaowd.test.designPattern.builderPattern; import java.util.ArrayList; import java.util.List; //产品保证顺序 public abstract class Car { private List<String> sequence = new ArrayList<String>(); public abstract void start(); public abstract void engine(); public final void run() { for(String order : sequence) { if("START".equals(order)) { start(); }else if("ENGINE".equals(order)){ engine(); } } } public void setSequence(List<String> sequence) { this.sequence = sequence; } }
package com.zhaowd.test.designPattern.builderPattern;
import java.util.List;
//建造者提供获取产品及设置顺序的能力
public class BmwBuilder extends CarBuilder{
private BmwCar bmw = new BmwCar();
@Override
public void setSequence(List<String> sequence) {
bmw.setSequence(sequence);
}
@Override
public Car getCarModel() {
// TODO Auto-generated method stub
return bmw;
}
}
第一种,直接使用建造者来操作产品
List<String> sequence = new ArrayList<String>();
sequence.add("START");
sequence.add("ENGINE");
BmwBuilder bmw = new BmwBuilder();
bmw.setSequence(sequence);
bmw.getCarModel().run();
第二种,进一步优化,使用中间类对不同类型产品进行封装,对外提供简单的能力
package com.zhaowd.test.designPattern.builderPattern;
import java.util.ArrayList;
import java.util.List;
public class Director {
private BmwBuilder bmw = new BmwBuilder();
private static List<String> sequence = new ArrayList<String>();
public Car getABmw() {
this.sequence.clear();
sequence.add("START");
sequence.add("ENGINE");
bmw.setSequence(sequence);
return bmw.getCarModel();
}
public Car getBBmw() {
this.sequence.clear();
sequence.add("ENGINE");
sequence.add("START");
bmw.setSequence(sequence);
return bmw.getCarModel();
}
}
直接提供不同类型产品的操作
Director dir = new Director();
dir.getABmw().run();
dir.getBBmw().run();