登陆注册
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车以专利技术停车了

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

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

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

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

同类推荐
  • 体感交互技术

    体感交互技术

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

    信息技术教育大全-计算机网络

    信息技术教育大全-计算机网络信息技术教育大全-计算机网络信息技术教育大全-计算机网络信息技术教育大全-计算机网络信息技术教育大全-计算机网络信息技术教育大全-计算机网络信息技术教育大全-计算机网络
  • 图说电子计算机

    图说电子计算机

    今天人们谈到计算机常常会把它和网络联系起来。20世纪90年代兴起的因特网其影响之广、普及之快也是大家始料未及的,也从没有一种技术能像网络一样日新月异,并迅速地改变着我们的学习和生活方式。因特网大大缩小了时空界限,为我们提供了快捷方便的交流途径。在未来10年内,计算机又将会有怎样飞速的发展呢?在互联网上进行医疗诊断、远程教学、电子商务、视频会议等活动已经实现,未来的互联网的传输速率将会提高100倍,大家可以随时随地连接到因特网上,更方便地进行交流、沟通和开展商务活动。
  • 计算机与人工智能(科学新知丛书)

    计算机与人工智能(科学新知丛书)

    本书是专门为中小学生编写的科普读物。全书共分八个部分,分别就计算机诞生的历程,计算机的种类、构造、作用及其发展趋势等方面进行了详尽的论述,全书论述深入浅出,行文活泼流畅。为本书的主要读者——广大的中小学生朋友认识计算机、了解计算机和掌握计算机提供了一把钥匙,是新时期中小学生开展素质教育不可多得的科普读物,中小学生家长及教师阅读此书也能从中获得有益的启示和感悟。
  • 科学伴你行-神奇的通信技术

    科学伴你行-神奇的通信技术

    在日常生活中,有时人们要借助于小旗子来进行通信联络,比如,开运动会时,发令员常常要用小旗子与计时员联系;当你乘坐火车进入车站时,都会看到车站工作人员拿着红色和绿色的小旗子在站台上进行指挥;在战争中,打出白色旗子表示投降,插上红色旗子表明胜利;航行在茫茫大海上的船只,双方船员会凭不同旗帜组成的标志,来了解对方的意思。以上种种用小旗子来“说话”的通信方式就叫做旗语。
热门推荐
  • 学姐英明

    学姐英明

    天才少年与捉弄人的学姐,不得不说的校园故事。
  • 抗战穿越记

    抗战穿越记

    因为车祸穿越到抗战,为了保卫从前的祖国山河,这个未来人也要贡献自己的力量。
  • 重生小黄蚁

    重生小黄蚁

    【昆虫流不化型】军团文刘羽穿越后给自己订了个小目标,那就是征服蚁后。全球基因能出现的幕后黑手?且看拥有十万蚁后后宫的主角如何打造昆虫军团。
  • 心不动就不会痛

    心不动就不会痛

    璀灿,一个平凡的吃货。但是再平凡的人,也有可能成为某个人心中,不平凡的存在。亲情,爱情,友情,虽说它们不是生活的全部?但它们却能将你短短的几十年填满!在这个花花世界,你是否依然相信有一种叫命中注定的东西。你又是否知道,自己该珍惜什么?
  • 无品村官

    无品村官

    曲皓宇,一个大学生村官,问路官场的奋斗历程!《無品村官》交流群:261097233(谢谢赏阅!!!!)
  • 你是我的梦中注定

    你是我的梦中注定

    十八岁那年林夕兮就总是能在梦里梦见一个男子,本以为是春梦却在现实中遇上了梦中人。后来的梦里梦中人许下了承诺,可现实……“那本就是一场梦,是我奢求过多,是我过于贪恋。今后你我各归各,相见即是陌生人,从今往后我们谁也不欠。”她离开了那座城市四年,再回时却带着一位萌娃,当萌娃问起爹地的事她却丢下一句你爹死了,而不知的是那‘已死’的亲爹就在身后……
  • 天恨传

    天恨传

    讲述了一个叫天恨的孩子的奇妙经历。支持一下哦
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!