登陆注册
8183300000123

第123章 9 奥迪audi车

大B:“你喜欢奥迪audi车吗?”

小A:“嘿嘿!喜欢。”

大B:“我就举个奥迪audi车的例子,让你更好地理解抽象工厂模式。”

小A:“好啊!”

大B:“介绍了工厂方法的使用,从那个程序中可以看到,奥迪audi车是从audicarfactoryimple工厂中创建出来的,而大众3W车是从threeWcarfactoryimple工厂中创建出来的,那么如果这2家汽车生产大厂由总部在北京市,现在发展到上海,深圳等城市创建生气汽车的分厂,该怎么办?是不是得将原来的奥迪汽车工厂类。”

public class audicarfactoryimple implements Icarfactory{

public Icarinterface createcar(){

caraudiimple caraudiimpleref=new caraudiimple();

caraudiimpleref。setName(“奥迪A6”);

caraudiimpleref。setSpeed(300);

return caraudiimpleref;

}

}

改成类似如下的模样:

public class audicarfactoryimple implements Icarfactory{

public Icarinterface createcar(String areacar){

if(areacar。equals(“北京”)){创建一个北京的奥迪汽车}

if(areacar。equals(“上海”)){创建一个上海的奥迪汽车}

if(areacar。equals(“深圳”)){创建一个深圳的奥迪汽车}

return caraudiimpleref;

}

}

小A:“发现一个问题,不同地域的汽车却在一个工厂中出现。”

大B:“这是不合乎常理的,因为北京奥迪在北京分厂创建,上海奥迪在上海分厂创建,这样才对。所以如果遇到分‘大系’来创建对象的时候,抽象工厂方法是肯定要使用的时候了。”

小A:“什么是‘大系’?”

大B:“这里的大系指的就是从地域上来分。这个例子就应该以‘用抽象工厂来定义具体工厂的抽象,而由具体工厂来创建对象’。比如在玩‘极品飞车’这款游戏,每个地图处都有造车的工厂,每个造车的工厂都因为有造车的档次不同而划分为高级车厂,低级车厂,那么这样的场景正是应用抽象工厂的好时机,再来理解一下这句话‘用抽象工厂来定义具体工厂的抽象,而由具体工厂来创建对象’,用抽象造车工厂来定义具体造车工厂的抽象,而由具体的造车工厂来创建汽车,这就是抽象工厂与工厂方法的不同,工厂方法中对象的创建是由工厂方法来确定的,创建的对象都是不分类并且实现一个接口的,而抽象工厂就是在工厂方法的基础上对创建车的对象的行为进行分类,比如北京车厂,上海车厂等。”

【抽象工厂模式解释。

类型:创建模式

提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

【抽象工厂模式-JAVA代码实现。

新建抽象工厂接口:

package carfactoryinterface;

import carinterface。Icarinterface;

public interface Icarfactory{

public Icarinterface createthreeWcar();

public Icarinterface createaudicar();

}

新建抽象工厂接口的高级车adv工厂实现类:

package carfactoryimple;

import carfactoryinterface。Icarfactory;

import carimple。car3wimpleadv;

import carimple。caraudiimpleadv;

import carinterface。Icarinterface;

public class carfactoryadv implements Icarfactory{

public Icarinterface createaudicar(){

caraudiimpleadv caraudiimpleadv=new caraudiimpleadv();

caraudiimpleadv。setName(“奥迪A6”);

caraudiimpleadv。setSpeed(300);

return caraudiimpleadv;

}

public Icarinterface createthreeWcar(){

car3wimpleadv car3wimpleadvref=new car3wimpleadv();

car3wimpleadvref。setName(“大众A6”);

car3wimpleadvref。setSpeed(300);

return car3wimpleadvref;

}

}

新建抽象工厂接口的普通车low工厂实现类:

package carfactoryimple;

import carfactoryinterface。Icarfactory;

import carimple。car3wimplelow;

import carimple。caraudiimplelow;

import carinterface。Icarinterface;

public class carfactorylow implements Icarfactory{

public Icarinterface createaudicar(){

caraudiimplelow caraudiimplelowref=new caraudiimplelow();

caraudiimplelowref。setName(“奥迪A6”);

caraudiimplelowref。setSpeed(300);

return caraudiimplelowref;

}

public Icarinterface createthreeWcar(){

car3wimplelow car3wimplelowref=new car3wimplelow();

car3wimplelowref。setName(“大众A6”);

car3wimplelowref。setSpeed(300);

return car3wimplelowref;

}

}

上面已经有抽象工厂和具体工厂的实现类了。

新建汽车接口:

package carinterface;

public interface Icarinterface{

public void start();

public void stop();

}

新建汽车父类:

package carimple;

import carinterface。Icarinterface;

public class basecarimple implements Icarinterface{

private int speed;

private String name;

public int getSpeed(){

return speed;

}

public void setSpeed(int speed){

this。speed=speed;

}

public String getName(){

return name;

}

public void setName(String name){

this。name=name;

}

public void start(){

//TODO Auto-generated method stub

}

public void stop(){

//TODO Auto-generated method stub

}

}

新建大众高级车:

package carimple;

import carinterface。Icarinterface;

public class car3wimpleadv extends basecarimple{

public void start(){

System。out。println(富华版: this。getName() 车以专利技术起动了 最高速度为:

this。getSpeed());

}

public void stop(){

System。out。println(富华版:“ this。getName() ”车以专利技术停车了);

}

}

新建大众普通车:

package carimple;

import carinterface。Icarinterface;

public class car3wimplelow extends basecarimple{

public void start(){

System。out。println(普通版: this。getName() 车以专利技术起动了 最高速度为:

this。getSpeed());

}

public void stop(){

System。out。println(普通版:“ this。getName() ”车以专利技术停车了);

}

}

新建大众普通车:

package carimple;

import carinterface。Icarinterface;

public class caraudiimpleadv extends basecarimple{

public void start(){

System。out。println(富华版: this。getName() 车以专利技术起动了 最高速度为:

this。getSpeed());

}

public void stop(){

System。out。println(富华版:“ this。getName() ”车以专利技术停车了);

}

}

新建奥迪普通车:

package carimple;

import carinterface。Icarinterface;

public class caraudiimplelow extends basecarimple{

public void start(){

System。out。println(普通版: this。getName() 车以专利技术起动了 最高速度为:

this。getSpeed());

}

public void stop(){

System。out。println(普通版:“ this。getName() ”车以专利技术停车了);

}

}

新建客户端运行类:

package runmain;

import carfactoryimple。carfactoryadv;

import carfactoryinterface。Icarfactory;

import carinterface。Icarinterface;

public class runmain{

public static void main(String[]args){

Icarfactory Icarfactoryref=new carfactoryadv();

Icarinterface Icarinterfaceref=Icarfactoryref

createthreeWcar();

Icarinterfaceref。start();

Icarinterfaceref。stop();

}

}

程序运行结果如下:

富华版:大众A6车以专利技术起动了 最高速度为:300

富华版:大众A6车以专利技术停车了

一开始只在后花园中种蔬菜类的时候可以用简单工厂模式,由工厂负责生成具体的蔬菜类,

但是如果后花园要引进水果类的时候简单模式就行不通了,因此需要使用工厂方法模式,将产品类族分开。

但是如果后花园的规模继续扩大到地域范围的分割时,比如说一个在北京,一个在上海的时候,工厂方法模式就不够了,因为对两个后花园来说,每个后花园的植物是要被种在一起的,并且两个后花园用工厂方法模式是无法体现其区别的。

从程序中可以看到,工厂是抽象的,工厂的实现是不一样的,不同的工厂创建出不同汽车。而工厂方法仅仅是用一个工厂去创建很多汽车。

同类推荐
  • 一本书读懂24种互联网思维

    一本书读懂24种互联网思维

    本书整合的改变世界的24种互联网思维,让我们对互联网新思维的认识变得立体、系统起来;同时深入浅出、通俗易懂地从技术和实践分析互联网新思维与传统思维相比较的优势,医治互联网焦虑症。未来属于既能深刻理解传统商业的本质,同时又具备互联网思维的人。
  • 下一代互联网

    下一代互联网

    本书系统介绍了下一代互联网的进展情况,包括下一代互联网的概念解析,国内外下一代互联网的最新发展情况,下一代互联网的关键技术进展,以及各国发展下一代互联网的政策计划。最后分析了下一代互联网对未来社会的影响,提出我国发展下一代互联网的政策建议等。全书共6章,包括互联网发展历史和现状,下一代互联网基本概念,下一代互联网研究最新进展,下一代互联网发展现状,我国发展下一代互联网现状,发展下一代互联网战略建议。
  • 体感交互技术

    体感交互技术

    本书提出了体感计算的研究,探讨了基于体验性认知的个性化电子学习方式,并且分析了面向儿童的艺术创造体验,在体感虚拟化身的帮助下,用户可以通过身体运动,促进情感心智的全面发展,
  • 研究性学习丛书-电脑知识

    研究性学习丛书-电脑知识

    本书对电脑知识有一个全面详细的介绍,会对读者的电脑知识进行提高。
  • 高校校园网管理与网上引导工作研究

    高校校园网管理与网上引导工作研究

    在当今的信息化潮流之下,我们不可否认互联网的出现,绝不仅仅是传送手段的变化,更重要的是它代表着一种新的社会形态——网络社会的来临。互联网已经以一种前所未有的方式渗透到现代社会的各个层面和领域,成为现代社会前进和发展的动力和工具,它推动了社会经济、文化政治实现所谓的“数字化转变”。
热门推荐
  • 末世之吸血女王

    末世之吸血女王

    前世,她因为被家人陷害,而被杀害。但她重生了,她是一个吸血鬼,也是吸血鬼中的女王,因为前世的教训她变的冷酷无情,原本活泼开朗的她变成一个冷酷的强者,重生后末世也跟着来临了,他在逃亡时认识了她,他爱上了她,他决心要变成一名强者,他要保护她,可是他却不知她是一位比他实力高出100倍甚至1000倍,她也爱上了他,可是她是吸血鬼,而他又是人不能在一起。。。。。。他们会怎么样呢?
  • 万古亘存

    万古亘存

    在不灭这场大道上,能做的,只有走下去,只有理解毁灭的真谛,才能做到不灭,不破不立,领悟灭字真谛,轻轻一叶舟,飘飘悠悠。
  • 从吞噬开始的妖生

    从吞噬开始的妖生

    资深轮回者林晨穿越各种影视,盗取里面的机缘不断地强化自身。自创系统与主神发生冲突引发大战,两败俱伤。再次睁眼变成了一只被遗弃的虎仔,这一切的故事要从刚刚睁开眼睛说起…………
  • 冷王的孽妃

    冷王的孽妃

    二十一世纪演员苏落落,演戏时被误伤致死导致穿越!穿越就穿越吧,还穿到澡盆里,这该死的男人,冷情的告诉她嫁入王府既不再是公主、更不配当王妃!原来,身体的原主人竟是明睿皇朝长公主,嚣张跋扈、人人生厌,残忍杀害明冽寒的爱人,只为嫁他!摊上这副身子的命运,苏落落的幸福,终归何处?
  • 十二战域

    十二战域

    大家好,从今以后,我的笔名就叫“小粽子”可能有点好笑吧,不过这是我名字的谐音。我的话正读初中,一名普普通通的男孩。小时候的经历让我成了比旁人更加成熟的思想。我创作没有别的要求,只是想把自己如何从挫折中站起...我是小粽子。
  • 西极小短集

    西极小短集

    我本一心成为天使守护世间,世人却将我装扮成为魔鬼。一个是一首伟大的史诗,这是一部悲壮的故事。
  • 顾先生你很犯规

    顾先生你很犯规

    陈梓很好奇为什么一个人上课睡觉打游戏,每次考试却都能排在第一。于是,她每天都在观察顾陌,有时还问他到底是怎么做到的。就在某天顾陌终于忍不住了,他把她抵在墙上,“你这么看着我,会让我认为你喜欢我……”“你不是想知道我是怎么做到的吗?我想了想,还是觉得只有我女朋友才能知道!……后来,顾陌笑着对陈梓说了五个字:“因为你笨啊。”
  • 看透牛皮经

    看透牛皮经

    为了引导读者深入这些公案,每一则都有妥切的“白话新唱”、慧眼独具的“分析与鉴赏”,公案中出现的术语也适时注释。阅读禅门公案,是最具挑战性的心灵探险,我们永远不知道就在下一瞬间,会有什么奇妙非凡的事情降临在我们身上!
  • 重生之宠物精灵系统

    重生之宠物精灵系统

    从地球穿越而来的骚年小志,没错,你没听错,就是小志,他在宠物小精灵的世界收服、培育宠物小精灵,在世界旅行冒险!与他一起穿越过来的还有超万能,超坑人的系统。啥子都能兑换,大师球不要9999999,只要9999,快来购买,节日期间半价。宠物,物品,都能兑换,快来和他一起冒险吧!此书为练手作品,一天一更,作者是学生,上学期间不更!
  • 豪门霸宠:刁蛮甜妻不好养

    豪门霸宠:刁蛮甜妻不好养

    ”老公,我要拍《时光悠然》的广告。”“不行!""老公,我要拍《逝去年华,你还在》电视剧。“"不行!"“老公,我要拍《那个微笑》电影。”"不行!“结婚前,叶辰风对他百依百顺。结婚后,不让她在电视上露脸!某一天,她终于受不了了,”叶辰风,我们离婚!“”老婆,怎么了?咱们好商量嘛!“”我要演电视剧!“”没问题!“叶辰风立马怂了。本文是宠文,不会太虐的!