原文地址:http://leihuang.org/2014/12/03/abstract-factory/
Creational 模式
物件的产生需要消耗系统资源,所以如何有效率的产生、管理 与操作物件,一直都是值得讨论的课题, Creational 模式即与物件的建立相关,在这个分类下的模式给出了一些指导原则及设计的方向。下面列举到的全属于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-12-03 16:50:20
Brave,Happy,Thanksgiving !