您的位置:首页 > 其它

Headfirst-6 抽象工厂模式

2009-08-06 13:14 141 查看

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