1.什么是抽象工廠模式
???借鑒于前面一片工廠模式,如果我們細(xì)心思考下梧田,如果在同一條生產(chǎn)線生產(chǎn)的A車(chē)系列、B車(chē)系列以及C車(chē)系列汽車(chē)的時(shí)候侧蘸,雖然都是由引擎裁眯、車(chē)輪、車(chē)身等相同的元素組成讳癌,但是如果引擎穿稳、車(chē)輪什么的不同系列的車(chē)可能配置不同,有可能A車(chē)配置國(guó)外進(jìn)口引擎晌坤,B車(chē)配置國(guó)內(nèi)引擎逢艘,因此簡(jiǎn)單的工廠模式就滿足不了這種設(shè)計(jì)需求了旦袋!因而出現(xiàn)了抽象工廠模式,將工廠模式下生產(chǎn)的對(duì)象屬性埋虹,增加多一層抽象層猜憎。
2.該模式適應(yīng)范圍
(1)對(duì)象內(nèi)部結(jié)構(gòu)差異不大,存在復(fù)雜又多的屬性時(shí)
(2)對(duì)象構(gòu)造過(guò)程差異不大時(shí)搔课,能直接通過(guò)靜態(tài)方法引用出來(lái)的時(shí)候
3.具體應(yīng)用
???筆者這里也直接使用簡(jiǎn)單的案例--汽車(chē)生產(chǎn)
(1)抽象生成車(chē)工廠
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車(chē)是高級(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車(chē)是普通配置
* 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)車(chē)屬性接口
package cn.wsy.factory.abstractFactory.elements;
/**
* 車(chē)輪接口 為了區(qū)分高級(jí)車(chē)路和普通車(chē)路
* 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ì)車(chē)輪實(shí)現(xiàn)類(lèi)
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", "普通車(chē)輪");
}
}
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í)車(chē)輪");
}
}
(5)不同性質(zhì)引擎實(shí)現(xiàn)類(lèi)
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)測(cè)試結(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.相對(duì)于工廠模式胰柑,拓展新更強(qiáng)
缺點(diǎn):
1.類(lèi)文件會(huì)爆炸性增加!
傻小孩b 共勉
20150218
博客地址:http://blog.csdn.net/yyeeqe_sy/article/category/5663107
歡迎加入 qq群: 450302004 (移動(dòng)開(kāi)發(fā)者狂熱群)
在這里爬泥,可以談理想柬讨,可以談技術(shù),更可以談帥哥美女歡迎