创建型模式:抽象了实例化过程,它们帮助一个系统如何独立于如何创建、组合和表示它的哪些对象。一个创建型模式使用了继承改变实例化的类,而一个对象的实例化将委托给别一个对象来现实。
Abstract Factory模式:
1、一个系统要独立于它的产品的创建、组合和表示时。
2、一个系统要由多个产品系例中的一个配制时。
3、强调一系例产品对象的相关设计以便进行联合使用。
4、当你提供一个产品库时,你只想显示他的接口不想显示他的实现。
代码:
package abstractFactory;/* * AbstractFactory */public abstract class Room { public abstract Wall makeWall(); public abstract Door makeDoor();}package abstractFactory;/* * The Abstract Class of Door */public abstract class Door { //private Door door; public abstract String getName() ;}
package abstractFactory;/* * The Abstract Class of Wall */public abstract class Wall { //private Wall wall; public abstract String getName();}
package abstractFactory;/* * A concrete Room - BedRoom */public class BedRoom extends Room { public BedRoom() { System.out.println("Initiated a bedroom !"); } public Door makeDoor() { return new BedRoomDoor(); } public Wall makeWall() { return new BedRoomWall(); }}
package abstractFactory;/* * A concrete Door for Bed Room */public class BedRoomDoor extends Door { private String doorName; public BedRoomDoor() { doorName = "BedRoomDoor"; } public String getName() { return doorName; }}
package abstractFactory;/* * A concrete Wall for Living Room */public class BedRoomWall extends Wall { private String wallName; public BedRoomWall() { wallName = "BedRoomWall"; } public String getName() { return wallName; }}
package abstractFactory;/* * A concrete Room - LivingRoom */public class LivingRoom extends Room { public LivingRoom() { System.out.println("Initiated a living room !"); } public Door makeDoor() { return new LivingRoomDoor(); } public Wall makeWall() { return new LivingRoomWall(); }}
package abstractFactory;/* * A concrete Door for Living Room */public class LivingRoomDoor extends Door { private String doorName; public LivingRoomDoor() { doorName = "LivingRoomDoor"; } public String getName() { return doorName; }}
package abstractFactory;/* * A concrete Wall for Living Room */public class LivingRoomWall extends Wall { private String wallName; public LivingRoomWall() { wallName = "LivingRoomWall"; } public String getName() { return wallName; }}
public class RoomMaker { public Room CreateRoom(String roomType) { if(roomType.equals("LivingRoom")) { return new LivingRoom(); } else if(roomType.equals("BedRoom")) { return new BedRoom(); } else { return new LivingRoom(); } }
public static void main(String[] args) { RoomMaker myMaker = new RoomMaker(); //----- Create Living Room Room myLivingRoom = myMaker.CreateRoom("LivingRoom"); //----- Create a door in living room Door livingDoor = myLivingRoom.makeDoor(); System.out.println("Living room door name is:" + livingDoor.getName() ); //----- Create a wall in living room Wall livingWall = myLivingRoom.makeWall(); System.out.println("Living room wall name is:" + livingWall.getName() );
//----- Create Bed Room Room myBedRoom = myMaker.CreateRoom("BedRoom"); //----- Create a door in bedroom Door BedDoor = myBedRoom.makeDoor(); System.out.println("Bed room door name is:" + BedDoor.getName() ); //----- Create a wall in bedroom Wall BedWall = myBedRoom.makeWall(); System.out.println("Bed room wall name is:" + BedWall.getName() );
}}