前言
Android的設(shè)計(jì)模式系列文章介紹,歡迎關(guān)注用僧,持續(xù)更新中:
Android的設(shè)計(jì)模式-設(shè)計(jì)模式的六大原則
一句話總結(jié)23種設(shè)計(jì)模式則
創(chuàng)建型模式:
Android的設(shè)計(jì)模式-單例模式
Android的設(shè)計(jì)模式-建造者模式
Android的設(shè)計(jì)模式-工廠方法模式
Android的設(shè)計(jì)模式-簡(jiǎn)單工廠模式
Android的設(shè)計(jì)模式-抽象工廠模式
Android的設(shè)計(jì)模式-原型模式
行為型模式:
Android的設(shè)計(jì)模式-策略模式
Android的設(shè)計(jì)模式-狀態(tài)模式
Android的設(shè)計(jì)模式-責(zé)任鏈模式
Android的設(shè)計(jì)模式-觀察者模式
Android的設(shè)計(jì)模式-模板方法模式
Android的設(shè)計(jì)模式-迭代器模式
Android的設(shè)計(jì)模式-備忘錄模式
Android的設(shè)計(jì)模式-訪問者模式
Android的設(shè)計(jì)模式-中介者模式
Android的設(shè)計(jì)模式-解釋器模式
Android的設(shè)計(jì)模式-命令模式
結(jié)構(gòu)型模式:
Android的設(shè)計(jì)模式-代理模式
Android的設(shè)計(jì)模式-組合模式
Android的設(shè)計(jì)模式-適配器模式
Android的設(shè)計(jì)模式-裝飾者模式
Android的設(shè)計(jì)模式-享元模式
Android的設(shè)計(jì)模式-外觀模式
Android的設(shè)計(jì)模式-橋接模式
1.定義
為創(chuàng)建一組相關(guān)或者相互依賴的對(duì)象提供一個(gè)接口勇婴,而無(wú)需指定它們的具體類械哟。
2.介紹
- 抽象工廠模式屬于創(chuàng)建型模式从撼。
- 工廠方法模式每個(gè)工廠只能創(chuàng)建一種類型的產(chǎn)品宗兼,而抽象工廠模式則能夠創(chuàng)建多種類型的產(chǎn)品剔宪。
- 例如:硬盤工廠只生產(chǎn)硬盤這種產(chǎn)品娩嚼,而電腦工廠則組合不同的硬盤塔插、內(nèi)存桐经、CPU等生產(chǎn)出電腦來(lái)。
3.UML類圖
3.1 角色說(shuō)明:
- AbstractProduct(抽象產(chǎn)品類):定義產(chǎn)品的公共接口主到。
- ConcreteProduct(具體產(chǎn)品類):定義產(chǎn)品的具體對(duì)象茶行,實(shí)現(xiàn)抽象產(chǎn)品類中的接口。
- AbstractFactory(抽象工廠類):定義工廠中用來(lái)創(chuàng)建不同產(chǎn)品的方法登钥。
- ConcreteFactory(具體工廠類):實(shí)現(xiàn)抽象工廠中定義的創(chuàng)建產(chǎn)品的方畔师。
4.實(shí)現(xiàn)
4.1 創(chuàng)建抽象產(chǎn)品類
定義公共接口:
//抽象產(chǎn)品類-- CPU
public abstract class CPU {
public abstract void showCPU();
}
//抽象產(chǎn)品類-- 內(nèi)存
public abstract class Memory {
public abstract void showMemory();
}
//抽象產(chǎn)品類-- 硬盤
public abstract class HD {
public abstract void showHD();
}
4.2 創(chuàng)建具體產(chǎn)品類
繼承Product類:
//具體產(chǎn)品類-- Intet CPU
public class IntelCPU extends CPU {
@Override
public void showCPU() {
System.out.println("Intet CPU");
}
}
//具體產(chǎn)品類-- AMD CPU
public class AmdCPU extends CPU {
@Override
public void showCPU() {
System.out.println("AMD CPU");
}
}
//具體產(chǎn)品類-- 三星 內(nèi)存
public class SamsungMemory extends Memory {
@Override
public void showMemory() {
System.out.println("三星 內(nèi)存");
}
}
//具體產(chǎn)品類-- 金士頓 內(nèi)存
public class KingstonMemory extends Memory {
@Override
public void showMemory() {
System.out.println("金士頓 內(nèi)存");
}
}
//具體產(chǎn)品類-- 希捷 硬盤
public class SeagateHD extends HD {
@Override
public void showHD() {
System.out.println("希捷 硬盤");
}
}
//具體產(chǎn)品類-- 西部數(shù)據(jù) 硬盤
public class WdHD extends HD {
@Override
public void showHD() {
System.out.println("西部數(shù)據(jù) 硬盤");
}
}
4.3 創(chuàng)建抽象工廠類
定義工廠中用來(lái)創(chuàng)建不同產(chǎn)品的方法:
//抽象工廠類,電腦工廠類
public abstract class ComputerFactory {
public abstract CPU createCPU();
public abstract Memory createMemory();
public abstract HD createHD();
}
4.4 創(chuàng)建具體工廠類
繼承Factory類:
//具體工廠類--聯(lián)想電腦
public class LenovoComputerFactory extends ComputerFactory {
@Override
public CPU createCPU() {
return new IntelCPU();
}
@Override
public Memory createMemory() {
return new SamsungMemory();
}
@Override
public HD createHD() {
return new SeagateHD();
}
}
//具體工廠類--華碩電腦
public class AsusComputerFactory extends ComputerFactory {
@Override
public CPU createCPU() {
return new AmdCPU();
}
@Override
public Memory createMemory() {
return new KingstonMemory();
}
@Override
public HD createHD() {
return new WdHD();
}
}
//具體工廠類--惠普電腦
public class HpComputerFactory extends ComputerFactory {
@Override
public CPU createCPU() {
return new IntelCPU();
}
@Override
public Memory createMemory() {
return new KingstonMemory();
}
@Override
public HD createHD() {
return new WdHD();
}
}
4.5 測(cè)試方法
public void test() {
System.out.println("--------------------生產(chǎn)聯(lián)想電腦-----------------------");
ComputerFactory lenovoComputerFactory = new LenovoComputerFactory();
lenovoComputerFactory.createCPU().showCPU();
lenovoComputerFactory.createMemory().showMemory();
lenovoComputerFactory.createHD().showHD();
System.out.println("--------------------生產(chǎn)華碩電腦-----------------------");
ComputerFactory asusComputerFactory = new AsusComputerFactory();
asusComputerFactory.createCPU().showCPU();
asusComputerFactory.createMemory().showMemory();
asusComputerFactory.createHD().showHD();
System.out.println("--------------------生產(chǎn)惠普電腦-----------------------");
ComputerFactory hpComputerFactory = new HpComputerFactory();
hpComputerFactory.createCPU().showCPU();
hpComputerFactory.createMemory().showMemory();
hpComputerFactory.createHD().showHD();
}
輸出結(jié)果為:
--------------------生產(chǎn)聯(lián)想電腦-----------------------
Intet CPU
三星 內(nèi)存
希捷 硬盤
--------------------生產(chǎn)華碩電腦-----------------------
AMD CPU
金士頓 內(nèi)存
西部數(shù)據(jù) 硬盤
--------------------生產(chǎn)惠普電腦-----------------------
Intet CPU
金士頓 內(nèi)存
西部數(shù)據(jù) 硬盤
5.應(yīng)用場(chǎng)景
- 生產(chǎn)多個(gè)產(chǎn)品組合的對(duì)象時(shí)牧牢。
6.優(yōu)點(diǎn)
- 代碼解耦看锉,創(chuàng)建實(shí)例的工作與使用實(shí)例的工作分開,使用者不必關(guān)心類對(duì)象如何創(chuàng)建塔鳍。
7.缺點(diǎn)
- 如果增加新的產(chǎn)品,則修改抽象工廠和所有的具體工廠,違反了開放封閉原則
8.工廠方法模式與抽象工廠模式比較
- 在工廠方法模式中具體工廠負(fù)責(zé)生產(chǎn)具體的產(chǎn)品伯铣,每一個(gè)具體工廠對(duì)應(yīng)一種具體產(chǎn)品,工廠方法具有唯一性轮纫。
- 抽象工廠模式則可以提供多個(gè)產(chǎn)品對(duì)象腔寡,而不是單一的產(chǎn)品對(duì)象。
相關(guān)文章閱讀
Android的設(shè)計(jì)模式-設(shè)計(jì)模式的六大原則
一句話總結(jié)23種設(shè)計(jì)模式則
創(chuàng)建型模式:
Android的設(shè)計(jì)模式-單例模式
Android的設(shè)計(jì)模式-建造者模式
Android的設(shè)計(jì)模式-工廠方法模式
Android的設(shè)計(jì)模式-簡(jiǎn)單工廠模式
Android的設(shè)計(jì)模式-抽象工廠模式
Android的設(shè)計(jì)模式-原型模式
行為型模式:
Android的設(shè)計(jì)模式-策略模式
Android的設(shè)計(jì)模式-狀態(tài)模式
Android的設(shè)計(jì)模式-責(zé)任鏈模式
Android的設(shè)計(jì)模式-觀察者模式
Android的設(shè)計(jì)模式-模板方法模式
Android的設(shè)計(jì)模式-迭代器模式
Android的設(shè)計(jì)模式-備忘錄模式
Android的設(shè)計(jì)模式-訪問者模式
Android的設(shè)計(jì)模式-中介者模式
Android的設(shè)計(jì)模式-解釋器模式
Android的設(shè)計(jì)模式-命令模式
結(jié)構(gòu)型模式:
Android的設(shè)計(jì)模式-代理模式
Android的設(shè)計(jì)模式-組合模式
Android的設(shè)計(jì)模式-適配器模式
Android的設(shè)計(jì)模式-裝飾者模式
Android的設(shè)計(jì)模式-享元模式
Android的設(shè)計(jì)模式-外觀模式
Android的設(shè)計(jì)模式-橋接模式