Java建造者模式
建造者模式
建造者模式適用場景:
建造一個複雜的物件適用,將構建物件的過程分開,每個類單獨構造物件的一部分,最後組裝起來,返回我們需要的物件。
下面的例子主要講解構造一個飛船
Demo:
//要獲得的物件,但是各個元件要拆分開,讓對應的類去實現
class AirShip {
private OrbitaModule orbitaModule;//軌道艙
private Engine engine;//發動機
private EscapeTower escapeTower;//逃逸塔
public OrbitaModule getOrbitaModule() {
return orbitaModule;
}
public void setOrbitaModule(OrbitaModule orbitaModule) {
this.orbitaModule = orbitaModule;
}
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
public EscapeTower getEscapeTower() {
return escapeTower;
}
public void setEscapeTower(EscapeTower escapeTower) {
this.escapeTower = escapeTower;
}
}
class OrbitaModule{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public OrbitaModule(String name) {
super();
this.name = name;
}
}
class Engine{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Engine(String name) {
super();
this.name = name;
}
}
class EscapeTower{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public EscapeTower(String name) {
super();
this.name = name;
}
}
public interface AirShipBuilder {
Engine builderEngine();
OrbitaModule builderOrbitaModule();
EscapeTower builderEscapeTower();
}
//建立返回物件的介面
public interface AirShipDirector {
AirShip directAirShip();
}
//組裝物件的實現類
public class AirShipBuilderImpl implements AirShipBuilder{
@Override
public Engine builderEngine() {
System.out.println("構建發動機");
return new Engine("發動機");
}
@Override
public OrbitaModule builderOrbitaModule() {
System.out.println("構建逃逸塔");
return new OrbitaModule("逃逸塔");
}
@Override
public EscapeTower builderEscapeTower() {
System.out.println("構建軌道艙");
return new EscapeTower("軌道艙");
}
}
//返回物件的實現類
public class AirShipDirectorImpl implements AirShipDirector{
//建立一個構造元件的介面物件,此處可以使用工廠模式進行修改
private AirShipBuilder airShipBuilder;
public AirShipDirectorImpl(AirShipBuilder airShipBuilder) {
super();
this.airShipBuilder = airShipBuilder;
}
@Override
public AirShip directAirShip() {
Engine builderEngine = airShipBuilder.builderEngine();
OrbitaModule builderOrbitaModule = airShipBuilder.builderOrbitaModule();
EscapeTower builderEscapeTower = airShipBuilder.builderEscapeTower();
AirShip ship = new AirShip();
ship.setEngine(builderEngine);
ship.setEscapeTower(builderEscapeTower);
ship.setEscapeTower(builderEscapeTower);
return ship;
}
}
//客戶端呼叫
public class Client {
public static void main(String[] args) {
AirShipDirector airShipDirector = new AirShipDirectorImpl(new AirShipBuilderImpl());
AirShip directAirShip = airShipDirector.directAirShip();
System.out.println(directAirShip);
}
}
建造者模式主要就是將建造飛船的過程簡單的拆分開,讓構建飛船的不同的元件讓不同的類去完成,此處就可以和工廠模式和單例模式相結合,讓開發變得更加清晰。