設計模式:抽象工廠模式
來源:程序員人生 發布時間:2015-01-16 08:46:12 閱讀次數:3588次
原文地址:http://leihuang.org/2014/12/03/abstract-factory/
Creational 模式
物件的產生需要消耗系統資源,所以如何有效力的產生、管理 與操作物件,1直都是值得討論的課題, Creational 模式即與物件的建立相干,在這個分類下的模式給出了1些指點原則及設計的方向。下面羅列到的全屬于Creational 模式
- Simple Factory 模式
- Abstract Factory 模式
- Builder 模式
- Factory Method 模式
- Prototype 模式
- Singleton 模式
- Registry of Singleton 模式
抽象工廠模式
前面我們講了簡單工廠模式,那里我們將電影分為動作片和愛情片,那末電影有便宜的有貴的之分,此時觀眾提出要求,我只看便宜的動作片,有些要看貴的電影片,那末照我們前面簡單工廠就不夠用了.
怎樣辦呢,觀眾要求變復雜了,那末我們只有讓工廠也復雜起來,Fox公司(IFoxFilmFactory)下面分為兩個部門,生產貴電影的部門(ExpensiveFilmFactory),生產便宜電影的部門(EconomicFilmFactory).此時電影分類也復雜了,動作片(IActionMovie)有貴的(ExpensiveActionMovie),有便宜的(EconomicActionMovie),愛情片(ILoveMovie)有貴的(ExpensiveLoveMovie),有便宜的(EconomicLoveMovie).
下面時類圖

IActionMovie 接口 --動作片
public interface IActionMovie {
public void playAction() ;
}
ILoveMovie 接口 --愛情片
public interface ILoveMovie {
public void playLove() ;
}
ExpensiveActionMovie 類 --貴的動作片
public class ExpensiveActionMovie implements IActionMovie {
@Override
public void playAction() {
System.out.println("貴的-哼哼哈兮!");
}
}
EconomicActionMovie 類 --便宜的動作片
public class EconomicActionMovie implements IActionMovie {
@Override
public void playAction() {
System.out.println("便宜-哼哼哈兮!");
}
}
ExpensiveLoveMovie 類 --貴的愛情片
public class ExpensiveLoveMovie implements ILoveMovie {
@Override
public void playLove() {
System.out.println("貴的-愛老虎油!");
}
}
EconomicLoveMovie 類 --便宜的愛情片
public class EconomicLoveMovie implements ILoveMovie {
@Override
public void playLove() {
System.out.println("便宜-愛老虎油!");
}
}
IFoxFilmFactory 接口 --Fox總工廠
public interface IFoxFilmFactory {
public IActionMovie getActionMovie() ;
public ILoveMovie getLoveMovie() ;
}
ExpensiveFilmFactory 類 --生產貴電影的部門
public class ExpensiveFilmFactory implements IFoxFilmFactory {
@Override
public IActionMovie getActionMovie() {
return new ExpensiveActionMovie();
}
@Override
public ILoveMovie getLoveMovie() {
return new ExpensiveLoveMovie();
}
}
EconomicFilmFactory 類 --生產便宜電影的部門
public class EconomicFilmFactory implements IFoxFilmFactory {
@Override
public IActionMovie getActionMovie() {
return new EconomicActionMovie();
}
@Override
public ILoveMovie getLoveMovie() {
return new EconomicLoveMovie();
}
}
AudienceClient 類 --觀眾
public class AudienceClient {
public static void main(String[] args) {
IFoxFilmFactory fox1 = new EconomicFilmFactory() ;
fox1.getActionMovie().playAction();
fox1.getLoveMovie().playLove();
IFoxFilmFactory fox2 = new ExpensiveFilmFactory() ;
fox2.getActionMovie().playAction();
fox2.getLoveMovie().playLove();
/* print
* 便宜-哼哼哈兮!
* 便宜-愛老虎油!
* 貴的-哼哼哈兮!
* 貴的-愛老虎油!
*/
}
}
2014⑴2-03 16:50:20
Brave,Happy,Thanksgiving !
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈