设计模式-创建型模式-抽象工厂
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() );
}
}
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() );
}
}
相关文章推荐
- 创建型设计模式之手工打造、简单工厂、工厂方法和抽象工厂(新)
- [C#]设计模式-抽象工厂-创建型模式
- java设计模式之创建型模式-抽象工厂(AbstractFactory)
- 跟着实例学习设计模式(4)-抽象工厂(创建型)
- 一起学Java设计模式--抽象工厂方法模式(创建型模式)
- 从FLC中学习的设计模式系列-创建型模式(2)-抽象工厂
- Cocos2d-x3.2与设计模式(一)创建型模式之ABSTRACT FACTORY(抽象工厂)--对象创建型模式
- 设计模式(五)抽象工厂(创建型)
- 【设计模式学习笔记三】【创建型模式】【抽象工厂(Abstract Factory)】
- 创建型设计模式之抽象工厂(Abstract Factory)模式
- 设计模式学习之抽象工厂(Abstract Factory,创建型模式)(3)
- 设计模式--创建型-AbstractFactory(抽象工厂)
- 创建型设计模式之抽象工厂方法模式
- 设计模式(一):创建型模式—AbstractFactory(抽象工厂)
- C++设计模式 -> 创建型 -> 抽象工厂(Abstract Factory)
- 设计模式之ABSTRACT FACTORY(抽象工厂)—对象创建型模式
- 设计模式(3)-创建型-抽象工厂(Abstract Factory)(个人笔记)
- 设计模式(二):抽象工厂AbstractFactory(创建型模式)
- PHP设计模式:创建型之抽象工厂(abstract factory)
- 设计模式02: Abstract Factory 抽象工厂(创建型模式)