23种经典设计模式的java实现_1_抽象工厂模式
来源:互联网 发布:win10不允许安装软件 编辑:程序博客网 时间:2024/05/21 09:54
抽象工厂模式的适用:
一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个来配置时。
当你要强调一系列相关的产品对象的设计以便进行联合使用时。
当你提供一个产品类库,而只想显示它们的接口而不是实现时。
示例说明:
有三种抽象的产品:墙、门、房间。
对这三种抽象产品有两组具体实现:卧室和起居室。
那么,我们的抽象工厂就可以根据客户的指令(即调用参数)去生产卧室和起居室的房间(墙和门包括在房间里)。
测试启动类:
package com.alex.designpattern.abstractfactory;
/** *//**
* 抽象工厂模式
* <p>
* 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
*
* @author <a href="mailto:huqiyes@gmail.com">huqi</a>
* @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);
}
}
/** *//**
* 抽象工厂模式
* <p>
* 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
*
* @author <a href="mailto:huqiyes@gmail.com">huqi</a>
* @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);
}
}
抽象产品:
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();
}
/** *//**
* 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();
}
实际产品_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;
}
}
/** *//**
* 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;
}
}
实际产品_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;
}
}
/** *//**
* 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;
}
}
最后,当然就是抽象工厂咯,不过要注意,这个抽象工厂的意思并不是这个“工厂”是抽象的,而是这个“工厂”加工的“产品”是来自于抽象的。
package com.alex.designpattern.abstractfactory;
/** *//**
* A Room Maker to test our simple Room Abstract Factory.
*
* @author <a href="mailto:huqiyes@gmail.com">huqi</a>
* @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());
}
}
/** *//**
* A Room Maker to test our simple Room Abstract Factory.
*
* @author <a href="mailto:huqiyes@gmail.com">huqi</a>
* @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());
}
}
- 23种经典设计模式的java实现_1_抽象工厂模式
- JAVA的23种设计模式---抽象工厂模式
- JAVA开发的23种设计模式之 --- 工厂模式 && 抽象工厂模式
- 设计模式_1_简单工厂模式
- Java 23种设计模式之抽象工厂模式详解
- Java 23种设计模式之抽象工厂模式
- 23种设计模式--抽象工厂模式
- java设计模式--抽象工厂
- Java设计模式-抽象工厂
- Java设计模式--抽象工厂
- java设计模式-抽象工厂
- 《大话设计模式》java实现之抽象工厂模式
- Java设计模式-抽象工厂设计模式
- 23种设计模式之python实现--抽象工厂
- 设计模式--抽象工厂模式(C++实现)
- 设计模式-抽象工厂模式 C++实现
- 设计模式的实现(C++)------抽象工厂模式(AbstractFactory)
- GOF23设计模式之抽象工厂模式的实现
- 使用 /proc 文件系统来控制系统(zt)
- linux常用命令
- 葡萄酒的文化
- 特殊样式表的格式
- C++中二维数组new小结
- 23种经典设计模式的java实现_1_抽象工厂模式
- Sybase 笔记
- Linux必学的系统管理命令
- CVS笔记
- 使用post与使用get区别
- 微电子 半导体 网址 一览表
- Linux必学的系统安全命令
- vim的使用说明,带每个键的命令图示
- struts 标签详解