建造者模式
package java_232_GOF23设计模式_建造者模式详解_练习;
/**
-
AirShip飞船
*/
public class AirShip {
private orbitalModule orbitalModule;//轨道舱
private Engine engine;//发动机
private EscapeTower escapeTower;//逃逸塔//get与set方法
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;
}
}
//添加类属性,构造器及相关的get与set方法;
class orbitalModule{
private String name;public orbitalModule(String name) {
super();
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) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class EscapeTower{
private String name;
public EscapeTower(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//----------------------飞船接口-------------------------------
package java_232_GOF23设计模式_建造者模式详解_练习;
/**
*
- AirShipBuilder飞船建造接口
- 构建子组件
/
public interface AirShipBuilder {//AirShipBuilder飞船建造
//构建发动机
Engine builderEngine();//Builder构建
OrbitalModule builderOrbitalModule();
EscapeTower builderEscapeTower();
}
//------------------------飞船装配接口---------------------
package java_232_GOF23设计模式_建造者模式详解_练习;
/*
-
AirShipDirector飞船装配
/
public interface AirShipDirector {//Director导引器
AirShip createAirShip();//createAirShip创建飞船;create创建;或者用词directAirShip()(管理)也可以
}
//--------------------------具体创建飞船类------------------------------
package java_232_GOF23设计模式_建造者模式详解_练习;
/* -
SxtAirShipBuilder; Sxt飞船建设者 , sxt是自己创建的一个名称
*/
public class SxtAirShipBuilder implements AirShipBuilder {//Builder创建者;注意:以Builder结尾的都是构建者模式;
//常见的StringBuilder,以后学习XML解析中,JDOM库中的类:DomBuilder,SaxBuilder;
//重写方法
public Engine builderEngine() {
System.out.println(“构建sxt牌发动机”);
return new Engine(“sxt牌发动机”);//也可以用工厂模式结合起来;创建一个发动机工厂模式或者单例模式;以下类似
}public EscapeTower builderEscapeTower() {
System.out.println(“构建sxt牌逃逸塔”);
return new EscapeTower(“sxt牌逃逸塔”);
}public OrbitalModule builderOrbitalModule() {
System.out.println(“构建sxt牌轨道舱”);
return new OrbitalModule(“sxt牌轨道舱”);
}
}
//----------------------具体实现类------------------------------
package java_232_GOF23设计模式_建造者模式详解_练习;
/** -
具体实现类
-
SxtAirShipDirector;sxt飞船创建者
*/
public class SxtAirShipDirector implements AirShipDirector{
//定义一个属性;为了获取构建的引用,便于下面使用
private AirShipBuilder builder;//builder构建者
//构造器
public SxtAirShipDirector(AirShipBuilder builder) {
super();
this.builder = builder;
}
//重写
public AirShip directAirShip() {
//调用builder创建不同的子组建
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;
}
//------------------------------测试类------------------------------
package java_232_GOF23设计模式_建造者模式详解_练习;
/**
-
测试类
/
public class Client {//Client客户端
public static void main(String[] args) {
//获取装配者和构建者
AirShipDirector director = new SxtAirShipDirector(new SxtAirShipBuilder());
//通过装配者获取飞船属性
AirShip ship = director.directAirShip();
//获取内容
System.out.println(ship.getEngine().getName());
System.out.println(ship.getEscapeTower().getName());
System.out.println(ship.getOrbitalModule().getName());
}
}
//结果----------------------------------------
//-------------------------如果添加其他方法-----------------------
package java_232_GOF23设计模式_建造者模式详解_练习;
/* -
AirShip飞船
*/
public class AirShip {
private OrbitalModule orbitalModule;//轨道舱
private Engine engine;//发动机
private EscapeTower escapeTower;//逃逸塔//2.添加其他方法 如发射
public void launch(){
System.out.println(“点火发射”);
}//get与set方法
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;
}
}
//添加类属性,构造器及相关的get与set方法;
class OrbitalModule{
private String name;public OrbitalModule(String name) {
super();
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) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class EscapeTower{
private String name;
public EscapeTower(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//------------------------添加方法后的调用-------------
package java_232_GOF23设计模式_建造者模式详解_练习;
/**
-
测试类
*/
public class Client {//Client客户端
public static void main(String[] args) {
//获取装配者和构建者
AirShipDirector director = new SxtAirShipDirector(new SxtAirShipBuilder());
//通过装配者获取飞船属性
AirShip ship = director.directAirShip();
//获取内容
System.out.println(ship.getEngine().getName());
System.out.println(ship.getEscapeTower().getName());
System.out.println(ship.getOrbitalModule().getName());//添加其他方法 调用 ship.launch();
}
}
//结果----------------------------
类图
类图
建造者模式