设计模式:抽象工厂模式
来源:程序员人生 发布时间:2015-01-16 08:46:12 阅读次数:3412次
原文地址: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 !
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠