1.什么是抽象工廠模式
???借鑒于前面一片工廠模式,如果我們細心思考下,如果在同一條生產線生產的A車系列、B車系列以及C車系列汽車的時候,雖然都是由引擎、車輪、車身等相同的元素組成,但是如果引擎、車輪什么的不同系列的車可能配置不同,有可能A車配置國外進口引擎,B車配置國內引擎,因此簡單的工廠模式就滿足不了這種設計需求了!因而出現了抽象工廠模式,將工廠模式下生產的對象屬性,增加多一層抽象層。
2.該模式適應范圍
(1)對象內部結構差異不大,存在復雜又多的屬性時
(2)對象構造過程差異不大時,能直接通過靜態方法引用出來的時候
3.具體應用
???筆者這里也直接使用簡單的案例--汽車生產
(1)抽象生成車工廠
package cn.wsy.factory.abstractFactory;
import cn.wsy.factory.abstractFactory.elements.AdvancedEngine;
import cn.wsy.factory.abstractFactory.elements.AdvancedWheel;
import cn.wsy.factory.abstractFactory.elements.Engine;
import cn.wsy.factory.abstractFactory.elements.Wheel;
/**
* A車是高級配置
* Created by wsy on 2016/2/18.
*/
public class Ab_CarFactory_A extends Ab_CarFactory{
@Override
public Wheel createWheel() {
return new AdvancedWheel();
}
@Override
public Engine createEngine() {
return new AdvancedEngine();
}
}
package cn.wsy.factory.abstractFactory;
import cn.wsy.factory.abstractFactory.elements.Engine;
import cn.wsy.factory.abstractFactory.elements.NormalEngine;
import cn.wsy.factory.abstractFactory.elements.NormalWheel;
import cn.wsy.factory.abstractFactory.elements.Wheel;
/**
* B車是普通配置
* Created by wsy on 2016/2/18.
*/
public class Ab_CarFactory_B extends Ab_CarFactory {
@Override
public Wheel createWheel() {
return new NormalWheel();
}
@Override
public Engine createEngine() {
return new NormalEngine();
}
}
(3)車屬性接口
package cn.wsy.factory.abstractFactory.elements;
/**
* 車輪接口 為了區分高級車路和普通車路
* Created by wsy on 2016/2/18.
*/
public interface Wheel {
public void method();
}
package cn.wsy.factory.abstractFactory.elements;
/**
* Created by wsy on 2016/2/18.
*/
public interface Engine {
public void method();
}
(4)不同性質車輪實現類
package cn.wsy.factory.abstractFactory.elements;
import android.util.Log;
/**
* Created by wsy on 2016/2/18.
*/
public class NormalWheel implements Wheel {
@Override
public void method() {
Log.i("NormalWheel", "普通車輪");
}
}
package cn.wsy.factory.abstractFactory.elements;
import android.util.Log;
/**
* Created by wsy on 2016/2/18.
*/
public class AdvancedWheel implements Wheel{
@Override
public void method() {
Log.i("Advanced","高級車輪");
}
}
(5)不同性質引擎實現類
package cn.wsy.factory.abstractFactory.elements;
import android.util.Log;
/**
* Created by wsy on 2016/2/18.
*/
public class NormalEngine implements Engine {
@Override
public void method() {
Log.i("NormalEngine", "普通引擎");
}
}
package cn.wsy.factory.abstractFactory.elements;
import android.util.Log;
/**
* Created by wsy on 2016/2/18.
*/
public class AdvancedEngine implements Engine {
@Override
public void method() {
Log.i("AdvancedEngine","高級引擎");
}
}
(6)測試結果
public void ab_factoryTest(){
Ab_CarFactory factory_a = new Ab_CarFactory_A();
factory_a.createEngine().method();
factory_a.createWheel().method();
Ab_CarFactory factory_b = new Ab_CarFactory_B();
factory_b.createEngine().method();
factory_b.createWheel().method();
}
總結:
優點:
1.明顯將接口與實現進行分離
2.相對于工廠模式,拓展新更強
缺點:
1.類文件會爆炸性增加!
傻小孩b 共勉
20150218
博客地址:http://blog.csdn.net/yyeeqe_sy/article/category/5663107
歡迎加入 qq群: 450302004 (移動開發者狂熱群)
在這里,可以談理想,可以談技術,更可以談帥哥美女歡迎