java 抽象工厂模式定义,《JAVA与模式》之抽象工厂模式

Abstract Factory定义

为一系列相关对象或相互依赖的对象创建一个接口,而无需指定它们的具体类。抽象工厂在这里起到一个约束的作用,并提供所有子类的一个统一外观,来让客户端使用

20180110153853950732.jpg

上面的uml图,我们会发现,ConcreteFactory1只会生成A1+B1,是有严格约束的,如果没有这个约束条件,则可用工厂方法代替

举个例子,有个抽象汽车工厂负责生产汽车,我们假设生产汽车的过程包括汽车门和汽车轮子,目前有奥迪和奔驰两个工厂,分别生产各自的汽车

1 //抽象工厂

2 interfaceAbstractCarFactory {3 /**生产汽车门*/

4 publicDoor createDoor();5

6 /**生产汽车轮子*/

7 publicWheel createWheel();8

9 }10

11 class BenzFactory implementsAbstractCarFactory {12

13 publicDoor createDoor() {14 //TODO Auto-generated method stub

15 return newBenzDoor();16 }17

18 publicWheel createWheel() {19 //TODO Auto-generated method stub

20 return newBenzWheel();21 }22 }23

24 class AudiFactory implementsAbstractCarFactory {25

26 publicDoor createDoor() {27 //TODO Auto-generated method stub

28 return newAudiDoor();29 }30

31 publicWheel createWheel() {32 //TODO Auto-generated method stub

33 return newAudiWheel();34 }35 }36

37 interfaceDoor {38 //public void createDoor();

39 }40

41 interfaceWheel {42

43 //public void createWheel();

44 }45

46 class BenzDoor implementsDoor {47

48 publicBenzDoor() {49 System.out.println("生产奔驰汽车门");50 }51 }52

53 class AudiDoor implementsDoor {54

55 publicAudiDoor() {56 System.out.println("生产奥迪汽车门");57 }58 }59

60 class BenzWheel implementsWheel {61

62 publicBenzWheel() {63 System.out.println("生产奔驰轮子");64 }65 }66

67 class AudiWheel implementsWheel {68

69 publicAudiWheel() {70

71 System.out.println("生产奥迪轮子");72 }73

74 }

测试代码

//抽象工厂 在工厂方法基础上 复杂了产品线 即产品组 多个产品配件组成一个工厂产品并且产品是一个系列的,随意组合就不能构成最终的产品

AbstractCarFactory beazFactory= newBenzFactory();

AbstractCarFactory audiFactory= newAudiFactory();

beazFactory.createDoor();

audiFactory.createWheel();

ps:本例子中缺少一个角色,负责组装产品,这个角色中定义了抽象工厂,最后通过具体工厂对象来组装产品,这里就省略了

我们整理下代码

发现抽象工厂模式由几个角色组成

1.抽象工厂角色

2.具体工厂角色

3.抽象产品角色

4.具体产品角色

具体工厂负责组装不同的产品角色,最后形成产品

简单工厂、工厂方法、抽象工厂区别

总结:用最简单的话来概括就是,简单工厂只有一个具体工厂类来创建一种基类的多个不同派生类,工厂方法就是有多个派生于一个基类的具体工厂类,每个具体工厂只生产一种基类的一个派生类,抽象工厂也是只有一个工厂基类,但是每个具体工厂生产多个相关基类的各一个派生类。

参考:

http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html

http://men4661273.iteye.com/blog/1637880

http://blog.csdn.net/yuan22003/article/details/6709630

http://tianli.blog.51cto.com/190322/32545/

原文:http://www.cnblogs.com/draem0507/p/3796286.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值