国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php框架 > 框架设计 > 设计模式:抽象工厂模式

设计模式:抽象工厂模式

来源:程序员人生   发布时间:2015-01-16 08:46:12 阅读次数:3274次

原文地址: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).

下面时类图

img

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 !


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生