您的位置:首页 > 其它

设计模式-创建型模式-抽象工厂

2011-04-17 11:10 260 查看
创建型模式:抽象了实例化过程,它们帮助一个系统如何独立于如何创建、组合和表示它的哪些对象。一个创建型模式使用了继承改变实例化的类,而一个对象的实例化将委托给别一个对象来现实。

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() );

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: