java抽象工厂设计模式_23种经典设计模式的java实现_1_抽象工厂模式
抽象工廠模式的適用:
一個系統(tǒng)要獨(dú)立于它的產(chǎn)品的創(chuàng)建、組合和表示時。
一個系統(tǒng)要由多個產(chǎn)品系列中的一個來配置時。
當(dāng)你要強(qiáng)調(diào)一系列相關(guān)的產(chǎn)品對象的設(shè)計以便進(jìn)行聯(lián)合使用時。
當(dāng)你提供一個產(chǎn)品類庫,而只想顯示它們的接口而不是實(shí)現(xiàn)時。
示例說明:
有三種抽象的產(chǎn)品:墻、門、房間。
對這三種抽象產(chǎn)品有兩組具體實(shí)現(xiàn):臥室和起居室。
那么,我們的抽象工廠就可以根據(jù)客戶的指令(即調(diào)用參數(shù))去生產(chǎn)臥室和起居室的房間(墻和門包括在房間里)。
測試啟動類:
package com.alex.designpattern.abstractfactory;
/** *//**
* 抽象工廠模式
*
* 提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類。
*
* @author huqi
* @serialData 2007
*/
public class Test ...{
public static void main(String[] args) throws Exception ...{
// ----- Create Living Room
Room myLivingRoom = AbstractRoomFactory.createRoom("LivingRoom");
AbstractRoomFactory.showRoom(myLivingRoom);
// ----- Create Bed Room
Room myBedRoom = AbstractRoomFactory.createRoom("BedRoom");
AbstractRoomFactory.showRoom(myBedRoom);
}
}
抽象產(chǎn)品:
package com.alex.designpattern.abstractfactory;
/** *//**
* The Abstract Class of Wall
*/
public interface Wall ...{
public String getName();
}
package com.alex.designpattern.abstractfactory;
/** *//**
* The Abstract Class of Door
*/
public interface Door ...{
public String getName();
}
package com.alex.designpattern.abstractfactory;
/** *//**
* The Abstract Class of Room
*/
public interface Room ...{
public Wall getWall();
public Door getDoor();
}
實(shí)際產(chǎn)品_1
package com.alex.designpattern.abstractfactory;
/** *//**
* A concrete Room - Bed Room
*/
public class BedRoom implements Room ...{
public BedRoom() ...{
System.out.println("Initiated a bedroom.");
}
public Door getDoor() ...{
return new BedRoomDoor();
}
public Wall getWall() ...{
return new BedRoomWall();
}
}
package com.alex.designpattern.abstractfactory;
/** *//**
* A concrete Door for Bed Room
*/
public class BedRoomDoor implements Door ...{
private String doorName;
public BedRoomDoor() ...{
doorName = "BedRoomDoor";
}
public String getName() ...{
return doorName;
}
}
package com.alex.designpattern.abstractfactory;
/** *//**
* A concrete Wall for Bed Room
*/
public class BedRoomWall implements Wall ...{
private String wallName;
public BedRoomWall() ...{
wallName = "BedRoomWall";
}
public String getName() ...{
return wallName;
}
}
實(shí)際產(chǎn)品_2
package com.alex.designpattern.abstractfactory;
/** *//**
* A concrete Room - Living Room
*/
public class LivingRoom implements Room ...{
public LivingRoom() ...{
System.out.println("Initiated a livingroom.");
}
public Door getDoor() ...{
return new LivingRoomDoor();
}
public Wall getWall() ...{
return new LivingRoomWall();
}
}
package com.alex.designpattern.abstractfactory;
/** *//**
* A concrete Door for Living Room
*/
public class LivingRoomDoor implements Door ...{
private String doorName;
public LivingRoomDoor() ...{
doorName = "LivingRoomDoor";
}
public String getName() ...{
return doorName;
}
}
package com.alex.designpattern.abstractfactory;
/** *//**
* A concrete Wall for Living Room
*/
public class LivingRoomWall implements Wall ...{
private String wallName;
public LivingRoomWall() ...{
wallName = "LivingRoomWall";
}
public String getName() ...{
return wallName;
}
}
最后,當(dāng)然就是抽象工廠咯,不過要注意,這個抽象工廠的意思并不是這個“工廠”是抽象的,而是這個“工廠”加工的“產(chǎn)品”是來自于抽象的。
package com.alex.designpattern.abstractfactory;
/** *//**
* A Room Maker to test our simple Room Abstract Factory.
*
* @author huqi
* @serialData 2007
*/
public abstract class AbstractRoomFactory ...{
public static Room createRoom(String roomType) throws Exception ...{
if (roomType.equals("LivingRoom")) ...{
return new LivingRoom();
} else if (roomType.equals("BedRoom")) ...{
return new BedRoom();
} else ...{
throw new Exception("No this type room: " + roomType);
}
}
public static void showRoom(Room room) ...{
Door door = room.getDoor();
System.out.println("Room door name is: " + door.getName());
Wall wall = room.getWall();
System.out.println("Room wall name is: " + wall.getName());
}
}
總結(jié)
以上是生活随笔為你收集整理的java抽象工厂设计模式_23种经典设计模式的java实现_1_抽象工厂模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java创建变量的过程_java 对象的
- 下一篇: java运行class文件_java命令