設(shè)計(jì)模式---abstract Factory模式

1.什么是抽象工廠模式

???借鑒于前面一片工廠模式,如果我們細(xì)心思考下,如果在同一條生產(chǎn)線生產(chǎn)的A車系列、B車系列以及C車系列汽車的時(shí)候,雖然都是由引擎、車輪、車身等相同的元素組成,但是如果引擎、車輪什么的不同系列的車可能配置不同,有可能A車配置國外進(jìn)口引擎,B車配置國內(nèi)引擎,因此簡單的工廠模式就滿足不了這種設(shè)計(jì)需求了!因而出現(xiàn)了抽象工廠模式,將工廠模式下生產(chǎn)的對象屬性,增加多一層抽象層。

2.該模式適應(yīng)范圍

(1)對象內(nèi)部結(jié)構(gòu)差異不大,存在復(fù)雜又多的屬性時(shí)
(2)對象構(gòu)造過程差異不大時(shí),能直接通過靜態(tài)方法引用出來的時(shí)候

3.具體應(yīng)用
???筆者這里也直接使用簡單的案例--汽車生產(chǎn)
(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車是高級(jí)配置
 * 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;
 
/**
 * 車輪接口 為了區(qū)分高級(jí)車路和普通車路
 * 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)不同性質(zhì)車輪實(shí)現(xiàn)類

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","高級(jí)車輪");
    }
}

(5)不同性質(zhì)引擎實(shí)現(xiàn)類

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","高級(jí)引擎");
    }
}

(6)測試結(jié)果

   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();
    }

總結(jié):
優(yōu)點(diǎn):
1.明顯將接口與實(shí)現(xiàn)進(jìn)行分離
2.相對于工廠模式,拓展新更強(qiáng)
缺點(diǎn):
1.類文件會(huì)爆炸性增加!

傻小孩b 共勉
20150218

博客地址:http://blog.csdn.net/yyeeqe_sy/article/category/5663107

歡迎加入 qq群: 450302004 (移動(dòng)開發(fā)者狂熱群)
在這里,可以談理想,可以談技術(shù),更可以談帥哥美女歡迎

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容