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();
}
}
相关文章推荐
- 抽象工厂模式--HeadFirst学习
- 设计模式之禅-抽象工厂模式
- 【设计模式】简单工厂模式+工厂方法模式+抽象工厂模式
- 抽象工厂模式
- java设计模式之抽象工厂模式
- [设计模式]抽象工厂模式
- 设计模式之禅——抽象工厂模式
- 设计模式——抽象工厂模式详解
- 设计模式—抽象工厂模式
- 设计模式之抽象工厂模式
- 设计模式(2)------抽象工厂模式
- 简单工厂模式 单例工厂模式 工厂方法模式 抽象工厂模式 原型模式
- 抽象工厂模式详解
- 1.抽象工厂模式
- 设计模式 - (3)抽象工厂模式(创建型)
- <HeadFirst_HTML5> O'REILLY_Chap.5_实现HTML位置感知
- <HeadFirst_HTML与CSS> O'REILLY_Chap.2_认识HTML中的"HT"
- <HeadFirst_HTML与CSS> O'REILLY_Chap.10_div与span
- <HeadFirst_jQuery> O'REILLY_Chap.3_jQuery事件与函数
- 设计模式之抽象工厂模式