1 抽象工厂模式
定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。抽象工厂(abstract factory)模式又称为Kit模式,属于对象创建型模式。
3.1 模式设计原则
依赖抽象,不要依赖具体类。
1 系统需要屏蔽有关对象如何创建,如何组织和如何表示。
2 系统需要由关联的多个对象来构成。
3 有关的多个对象需要一起应用并且他们的约束是强迫的(不可分离的)。
4 你想提供一组对象而不显示他们的实现过程,只显示他们的接口。
3.2 例子类图
3.3 例子代码
/*
* Cpu.java
* Create on 2009-8-3 , 11:22
*/
package factory.abstractfactory;
/**
* 定义 cpu 接口
*/
public interface Cpu {
String getCpu();
}
/*
* AMD.java
* Create on 2009-8-3,11:25
*/
package factory.abstractfactory;
/**
* AMD cpu
*/
public class AMD implements Cpu{
public String getCpu() {
return "Athlon XP 2800+";
}
}
/*
* Intel.java
* Create on 2009-8-3,11:25
*/
package factory.abstractfactory;
/**
* Intel cpu
*/
public class Intel implements Cpu{
public String getCpu() {
return "奔腾 4 3.2C";
}
}
/*
* HardDisk.java
* Create on 2009-8-3,11:27
*/
package factory.abstractfactory;
/**
*
*/
public interface HardDisk {
public String getSize();
}
/*
* Maxtor.java
* Create on 2009-8-3,11:31
*/
package factory.abstractfactory;
/**
* 定义Maxtor类,实现硬盘接口
*/
public class Maxtor implements HardDisk{
public String getSize() {
return "MaXLine Plus II 200G";
}
}
/*
* WestDigit.java
* Create on 2009-8-3 12:26
*/
package factory.abstractfactory;
/**
* 实现硬盘接口
*/
public class WestDigit implements HardDisk{
public String getSize() {
return "WD2005JD 250G";
}
}
/*
* MainBoard.java
* Create on 2009-8-3 , 12:32
*/
package factory.abstractfactory;
/**
* 主板接口,包含参数为 cpu 的公共方法 <CODE>attach()</CODE>。
*/
public interface MainBoard {
void attach(Cpu cpu) throws Exception;
}
/*
* MSI865PE.java
* Create on 2009-8-3,12:35
*/
package factory.abstractfactory;
/**
* 实现主板接口
*/
public class MSI865PE implements MainBoard{
public void attach(Cpu cpu) throws Exception {
if(cpu.getClass().toString().endsWith("Intel")){
System.out.println("MSI856PE");
}else{
throw new Exception("主板 MSI865PE 只能配 Intel 的 cpu");
}
}
}
/*
* MSIK7N2G.java
* Create on 2009-8-3,12:35
*/
package factory.abstractfactory;
/**
* 实现主板接口
*/
public class MSIK7N2G implements MainBoard{
public void attach(Cpu cpu) throws Exception {
if (cpu.getClass().toString().endsWith("AMD")) {
System.out.println("MSIK7N2G");
} else {
throw new Exception("主板 MSIK7N2G 只能配 AMD 的 cpu");
}
}
}
/*
* ComputerFactory.java
* Create on 2009-8-3,12:46
*/
package factory.abstractfactory;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* 定义抽象电脑工厂类
*/
public abstract class ComputerFactory {
Cpu cpu;
HardDisk hd;
MainBoard mb;
public void show(){
System.out.println(this.getClass().getName().toString() + "生产的电脑配置");
System.out.println("CPU:" + cpu.getCpu());
System.out.println("HD:" + hd.getSize());
System.out.println("MainBoard:");
try {
mb.attach(cpu);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
/*
* DELL.java
* Create on 2009-8-3,12:54
*/
package factory.abstractfactory;
/**
* 生产厂商
*/
public class DELL extends ComputerFactory {
DELL() {
cpu = new AMD();
hd = new Maxtor();
mb = new MSIK7N2G();
}
}
/*
* IBM.java
* Create on 2009-8-3,12:54
*/
package factory.abstractfactory;
/**
* 生产厂商
*/
public class IBM extends ComputerFactory {
IBM() {
cpu = new Intel();
hd = new WestDigit();
mb = new MSI865PE();
}
}
/*
* Client.java
* Create on 2009-8-3,13:41
*/
package factory.abstractfactory;
/**
* 抽象工厂模式(Abstract Factory Pattern)<br>
* 《深入浅出设计模式》<br>
* <li>定义:<br>
* 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂<br>
* (Abstract Factory)模式又称为 Kit 模式,属于对象创建型模式。
* <li>应用:<br>
* 1.系统需要屏蔽有关对象如何创建、如何组织和如何表示。<br>
* 2.系统需要由关联的多个对象来构成。<br>
* 3.有关的多个对象需要一起应用并且他们的约束是强迫的(不可分离的)。<br>
* 4.你想提供一组对象而不显示他们的实现过程,只显示他们的接口。
*
*/
public class Client {
public static void main(String[] args){
IBM ibm = new IBM();
ibm.show();
DELL dell = new DELL();
dell.show();
}
}