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();
}
}
在以下情況下可以使用 抽象工廠:
一個系統要獨立于它的産品的建立、組合和表示時。
一個系統要由多個産品系列中的一個來配置時。
隻想顯示産品的接口而非實作時
抽象工廠模式的優缺點:
優點:它分離了具體的類,它使得易于交換産品系列
缺點:難以支援新種類的産品