天天看點

Abstract Factory(抽象工廠)模式--對象建立型

Abstract Factory模式的意圖:

提供一個建立一系列相關或互相依賴對象的接口,而無需指定它們具體的類。

我的了解:

抽象工廠定義了可以建立産品的種類,然後針對不同的需要使用不同的子工廠建立相應的産品!

執行個體:一個電腦硬體廠商要生産兩種不同的硬碟和記憶體。

AbstractFactory.java

/**
 * filename:Test.java
 * createtime:2011-4-8上午12:22:59
 * author:wustrive_2008
 * E-mail:[email protected]
 */
package com.gufengxiachen.designpatterns.abstractfactory;

public abstract class AbstractFactory {
	public abstract AbstractHardDisk getHardDisk();
	public abstract AbstractMemory getMemory();
}





           

AbstractHardDisk.java:

/**
 * filename:Test.java
 * createtime:2011-4-8上午12:22:59
 * author:wustrive_2008
 * E-mail:[email protected]
 */
package com.gufengxiachen.designpatterns.abstractfactory;

public abstract class AbstractHardDisk {
	public abstract void textHardDisk();

}
class HardDiskA extends AbstractHardDisk{

	@Override
	public void textHardDisk() {
		System.out.println("硬碟A生産成功");
		
	}
}
class HardDiskB extends AbstractHardDisk{

	@Override
	public void textHardDisk() {
		System.out.println("硬碟B生産成功");
		
	}	
}




           

 AbstractMemeory.java:

/**
 * filename:Test.java
 * createtime:2011-4-8上午12:22:59
 * author:wustrive_2008
 * E-mail:[email protected]
 */
package com.gufengxiachen.designpatterns.abstractfactory;

public abstract class AbstractMemory {
	public abstract void textMemory();

}
class MemoryA extends AbstractMemory{

	@Override
	public void textMemory() {
		System.out.println("記憶體A生産成功");
	}	
}
class MemoryB extends AbstractMemory{

	@Override
	public void textMemory() {
		System.out.println("記憶體B生産成功");
	}	
}





           

 AFactory.java:

/**
 * filename:Test.java
 * createtime:2011-4-8上午12:22:59
 * author:wustrive_2008
 * E-mail:[email protected]
 */
package com.gufengxiachen.designpatterns.abstractfactory;

public class AFactory extends AbstractFactory{


	@Override
	public AbstractHardDisk getHardDisk() {
		// TODO Auto-generated method stub
		
		return new HardDiskA();
	}

	@Override
	public AbstractMemory getMemory() {
		// TODO Auto-generated method stub
		return new MemoryA();
	}

}





           

 BFactory.java:

/**
 * filename:Test.java
 * createtime:2011-4-8上午12:22:59
 * author:wustrive_2008
 * E-mail:[email protected]
 */
package com.gufengxiachen.designpatterns.abstractfactory;

public class BFactory extends AbstractFactory{

	@Override
	public AbstractHardDisk getHardDisk() {
		// TODO Auto-generated method stub
		return new HardDiskB();
	}

	@Override
	public AbstractMemory getMemory() {
		// TODO Auto-generated method stub
		return new MemoryB();
	}
	

}





           

 Client.java:

/**
 * filename:Test.java
 * createtime:2011-4-8上午12:22:59
 * author:wustrive_2008
 * E-mail:[email protected]
 */
package com.gufengxiachen.designpatterns.abstractfactory;

public class Client {
	public static void main(String[] args) {
		AbstractFactory af=new BFactory();
		AbstractHardDisk hd= af.getHardDisk();
		AbstractMemory ma=af.getMemory();
		hd.textHardDisk();
		ma.textMemory();
	}
	
}





           

在以下情況下可以使用 抽象工廠:

一個系統要獨立于它的産品的建立、組合和表示時。

一個系統要由多個産品系列中的一個來配置時。

隻想顯示産品的接口而非實作時

抽象工廠模式的優缺點:

優點:它分離了具體的類,它使得易于交換産品系列

缺點:難以支援新種類的産品