创建者模式

来源:互联网 发布:linux怎么设置ip地址 编辑:程序博客网 时间:2024/05/19 20:43

//轨道舱

class OrbitalModule{

private String name;
public OrbitalModule(String name) {
this.name = name;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}
}

//发动机
class Engine {
private String name;


public Engine(String name) {
this.name = name;
}


public String getName() {
return name;
}
public void setName(String name) {
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 class AirShip {


private OrbitalModule orbitalModule;  //轨道舱
private Engine engine; //发动机
private EscapeTower escapeTower;  //逃逸塔


public void launch(){
System.out.println("发射!");
}

public OrbitalModule getOrbitalModule() {
return orbitalModule;
}
public void setOrbitalModule(OrbitalModule orbitalModule) {
this.orbitalModule = orbitalModule;
}
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;
}

}


//零部件建造接口

public interface AirShipBuilder {
Engine builderEngine();
OrbitalModule builderOrbitalModule();
EscapeTower  builderEscapeTower();
}


//零部件建造实现类

public class SxtAirShipBuilder implements AirShipBuilder {
//StringBuilder, 以后学习XML解析中,JDOM库中的类:DomBuilder,SaxBuilder
@Override
public Engine builderEngine() {
return new Engine("发动机");
}

@Override
public EscapeTower builderEscapeTower() {
return new EscapeTower("逃逸塔");
}

@Override
public OrbitalModule builderOrbitalModule() {
return new OrbitalModule("轨道舱");
}
}


//飞船组装接口

public interface AirShipDirector {

AirShip   directAirShip();
}

//飞船组装实现类

public class SxtAirshipDirector implements AirShipDirector {
private AirShipBuilder builder;

public SxtAirshipDirector(AirShipBuilder builder) {
this.builder = builder;
}

@Override
public AirShip directAirShip() {
Engine e = builder.builderEngine();
OrbitalModule o = builder.builderOrbitalModule();
EscapeTower et = builder.builderEscapeTower();

//装配成飞船对象
AirShip ship = new AirShip();
ship.setEngine(e);
ship.setEscapeTower(et);
ship.setOrbitalModule(o);
return ship;
}
}

测试类
public class Client {
public static void main(String[] args) {

AirShipDirector director = new SxtAirshipDirector(new SxtAirShipBuilder());


AirShip ship = director.directAirShip();

System.out.println(ship.getEngine().getName());

ship.launch();

}
}
原创粉丝点击