定義
為建立一組相關或互相依賴的對象提供一個接口,而且無需指定他們的具體類
角色
抽象工廠角色(Creator):抽象工廠角色是工廠方法模式的核心,與調用者直接互動用來提供産品。
具體工廠角色(Concrete Creator):這是實作抽象工廠接口的具體工廠類,包含與應用程式密切相關的邏輯,并且受到應用程式調用以建立産品對象。
抽象産品角色(Product):工廠方法模式所建立的對象的超類型,也就是産品對象的共同父類或共同擁有的接口。定義産品的規範,所有的産品實作都必須遵循産品接口定義的規範。
具體産品角色(Concrete Product):這個角色實作了抽象産品角色所定義的接口。某具體産品有專門的具體工廠建立,它們之間往往一一對應。
類圖

package com.vapy.creator.AbstractFactory;
/**
*
* @author vapy
*
*/
public interface Phone {
public void show();
}
package com.vapy.creator.AbstractFactory;
/**
*
* @author vapy
*
*/
public interface IPhone extends Phone {
public void show();
}
package com.vapy.creator.AbstractFactory;
/**
*
* @author vapy
*
*/
public class Iphone7 implements IPhone {
@Override
public void show() {
System.out.println("this is iphone7");
}
}
package com.vapy.creator.AbstractFactory;
/**
*
* @author vapy
*
*/
public interface Samsung extends Phone {
public void show();
}
package com.vapy.creator.AbstractFactory;
/**
*
* @author vapy
*
*/
public class SamsungS6 implements Samsung {
@Override
public void show() {
System.out.println("this is Samsung s6");
}
}
package com.vapy.creator.AbstractFactory;
/**
*
* @author vapy
*
*/
public interface IFactory {
public Phone createIPhone();
public Phone createSamsung();
}
package com.vapy.creator.AbstractFactory;
/**
*
* @author vapy
*
*/
public class Factory implements IFactory {
@Override
public IPhone createIPhone() {
return new Iphone7();
}
@Override
public Samsung createSamsung() {
return new SamsungS6();
}
}
package com.vapy.creator.AbstractFactory;
/**
*
* @author vapy
*
*/
public class Client {
public static void main(String[] args) {
IFactory factory = new Factory();
factory.createIPhone().show();
factory.createSamsung().show();
}
}
總結
簡單工廠模式、工廠方法模式、抽象工廠模式都屬于工廠模式,形式上也很相似,工廠方法模式針對的是一個産品等級結構 ,抽象工廠模式針對的是面向多個産品等級結構的,但他們的目的是一樣的,那就是解耦。個人認為在使用時不用太在意具體是哪個工廠模式,而應關注是否達到解耦的目的。
本文代碼可在github檢視:點選此處