`

JAVA设计模式学习4——简单工厂模式

 
阅读更多

转自:

http://alaric.iteye.com/blog/1908619

 

从这节开始学习设计模式,首先学习创建模式,其中工厂模式是创建模式里面最常见也常用的一种,工厂模式又分简单工厂模式(Simple Factory),工厂方法模式(Factory Method)和抽象工厂模式(Abstractor Factory),这里先学习最简单的也就是简单工厂模式。


简单工厂模式(Simple Factory)也称静态工厂方法模式,是工厂方法模式的特殊实现。简单工厂模式的一般性结构如下图:


         
简单工厂模式就是由一个工厂类根据传入的参量决定创建出哪一种产品类型的实例,下面我们拿实例来介绍简单工厂模式。如下图,抽象类型车包括子类火车,汽车,拖拉机。



工厂根据传入的参数来创建具体车的类型。上图中无法形象地表示抽象类所以用接口代替了。


java代码如下: 

 

Java代码  收藏代码
  1. package com.pattern.SimpleFactory;  
  2. /** 
  3. * 
  4. *【描述】:工厂类 
  5. *【作者】:alaric 
  6. *【时间 】:May 20, 2012 
  7. *【文件】:com.pattern.SimpleFactoryFactory.java 
  8. * 
  9. */  
  10. public class Factory {  
  11. /** 
  12. * 
  13. *【描述】:创建车的实例 这个类里面的判断代码在实际应用中多配置成map,如果用spring 则可以配置在bean的xml内 
  14. *【作者】:alaric 
  15. *【时间 】:May 20, 2012 
  16. * @throws TypeErrorException 
  17. * 
  18. */  
  19. public TrafficMachine creator(String type) throws TypeErrorException{  
  20. if(type.equals("Automobile")){  
  21. return new Automobile();  
  22. }else if (type.equals("Tractor")) {  
  23. return new Tractor();  
  24. }else if (type.equals("Train")) {  
  25. return new Train();  
  26. }else{  
  27. throw new TypeErrorException("not find "+type);  
  28. }  
  29. }  
  30. }  
  31. package com.pattern.SimpleFactory;  
  32. /** 
  33. * 
  34. *【描述】:汽车类 
  35. *【作者】:alaric 
  36. *【时间 】:May 20, 2012 
  37. *【文件】:com.pattern.SimpleFactoryAutomobile.java 
  38. * 
  39. */  
  40. public class Automobile extends TrafficMachine{  
  41. @Override  
  42. public void traffic() {  
  43. // TODO Auto-generated method stub  
  44. }  
  45. }  
  46. package com.pattern.SimpleFactory;  
  47. /** 
  48. * 
  49. *【描述】:拖拉机 
  50. *【作者】:alaric 
  51. *【时间 】:May 20, 2012 
  52. *【文件】:com.pattern.SimpleFactoryTractor.java 
  53. * 
  54. */  
  55. public class Tractor extends TrafficMachine{  
  56. @Override  
  57. public void traffic() {  
  58. // TODO Auto-generated method stub  
  59. }  
  60. /** 
  61. * 
  62. *【描述】:耕地 
  63. *【作者】:alaric 
  64. *【时间 】:May 20, 2012 
  65. * 
  66. */  
  67. public void plough(){  
  68. }  
  69. }  
  70. package com.pattern.SimpleFactory;  
  71. /** 
  72. * 
  73. *【描述】:火车 
  74. *【作者】:alaric 
  75. *【时间 】:May 20, 2012 
  76. *【文件】:com.pattern.SimpleFactoryTrain.java 
  77. * 
  78. */  
  79. public class Train extends TrafficMachine {  
  80. private int nodeNum; //节数  
  81. private int trainNum; //车次  
  82. @Override  
  83. public void traffic() {  
  84. // TODO Auto-generated method stub  
  85. }  
  86. public int getNodeNum() {  
  87. return nodeNum;  
  88. }  
  89. public void setNodeNum(int nodeNum) {  
  90. this.nodeNum = nodeNum;  
  91. }  
  92. public int getTrainNum() {  
  93. return trainNum;  
  94. }  
  95. public void setTrainNum(int trainNum) {  
  96. this.trainNum = trainNum;  
  97. }  
  98. }  
  99. package com.pattern.SimpleFactory;  
  100. /** 
  101. * 
  102. *【描述】:抽象类 车 
  103. *【作者】:alaric 
  104. *【时间 】:May 20, 2012 
  105. *【文件】:com.pattern.SimpleFactoryMachine.java 
  106. * 
  107. */  
  108. public abstract class TrafficMachine {  
  109. public float power ;  
  110. public float load ;  
  111. public abstract void traffic();  
  112. }  
  113. package com.pattern.SimpleFactory;  
  114. /** 
  115. * 
  116. *【描述】:类型异常类 
  117. *【作者】:alaric 
  118. *【时间 】:May 20, 2012 
  119. *【文件】:com.pattern.SimpleFactoryTypeErrorException.java 
  120. * 
  121. */  
  122. public class TypeErrorException extends Exception{  
  123. /** 
  124. * 
  125. */  
  126. private static final long serialVersionUID = 562037380358960152L;  
  127. public TypeErrorException(String message) {  
  128. super(message);  
  129. // TODO Auto-generated constructor stub  
  130. }  
  131. }  

        通过以上分析及其代码列举可知,简单工厂类的构造有三种角色,它们分别是工厂角色,抽象产品角色和具体产品角色。工厂类的创建方法根据传入的参数来判断实例化那个具体的产品实例。

        工厂类角色:这个角色是工厂方法模式的核心,含有与应用紧密相连的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的java类来实现。
        抽象产品角色:担当这个角色的是一个java接口或者java抽象类来实现。往往是工厂产生具体类的父类。
        具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品往往就是一个具体的java类来承担。

简单工厂的优缺点:
         1、优点是因为客户端可以直接消费产品,而不关心具体产品的实现,免除了客户端直接创建产品对象的责任,简单工厂模式就是通过这种方法实现了对责任的分割。
         2、缺点是简单工厂在当产品多层次结构复杂时工厂只能依靠自己,这样就形成了一个万能类,如果这个工厂不能工作了,所有的创建都将不能实现,而且当产品类别多结构复杂的情况下,把所有创建放进一个工厂来,是的后期程序的扩展较为困难。这个困难将在下节(工厂方法)进行讲述。

分享到:
评论

相关推荐

    设计模式——简单工厂模式

    **设计模式——简单工厂模式** 简单工厂模式是创建型设计模式的一种,它提供了一种创建对象的最佳方式。在简单工厂模式中,一个专门的类(称为工厂类)负责创建对象,客户端无需知道所创建的对象的具体类,只需要...

    Java设计模式源代码——自己看pdf写的

    以上只是部分Java设计模式的介绍,实际的“DesignPatterns”压缩包可能包含了这些模式的源代码实现,通过阅读和学习这些代码,开发者可以更好地理解和运用设计模式,提升代码质量。同时,结合博主提供的博客链接,...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...

    java23种设计模式——图解——附带源码

    以上两种创建型模式,即工厂方法模式和抽象工厂模式,是Java设计模式中非常重要的一部分,它们可以帮助开发者更好地管理对象的创建过程,提高系统的灵活性和可扩展性。接下来的部分将继续探讨其他的设计模式。

    《Java设计模式》刘伟 课后习题及模拟试题答案.rar

    《Java设计模式》是刘伟老师的一本经典教材,它深入浅出地讲解了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的通用解决方案,是软件开发中的智慧结晶。这本书的课后习题和...

    设计模式——工厂方法模式

    工厂方法模式是面向对象设计模式中的一种,它属于创建型模式,主要解决的是当系统需要创建的对象具有多种类型,而具体创建哪种类型的对象在运行时才能确定的问题。在这个压缩包中,`FactoryMethod`可能包含了Java...

    设计模式——工厂模式在开发中的应用(简单计算器)

    这个是http://blog.csdn.net/dawanganban/article/details/9884681博客中java设计模式的源代码。下载前请先看《设计模式——工厂模式在开发中的应用》一文。

    Java设计模式-简单工厂

    **Java设计模式——简单工厂** 简单工厂模式是软件设计模式中的一种基础模式,它属于创建型设计模式。在Java编程中,我们常常会遇到需要创建一系列相关或相互依赖的对象,而这些对象的创建过程可能会非常复杂。这时...

    设计模式实现——抽象工厂模式结构实现

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许客户端使用一个通用接口来创建一组相关或相互依赖的对象,而无需关心它们的具体实现。在Java或其他...

    Java设计模式——工厂设计模式详解

    Java设计模式——工厂设计模式详解 在软件设计中,工厂设计模式是一种常用的设计模式,主要用于实例化有共同接口的类。Java设计模式——工厂设计模式是Java中的一种常用的设计模式,主要用于实例化有共同接口的类。...

    设计模式-Java语言中的应用(pdf)

    通过深入学习《设计模式——Java语言中的应用》,开发者能够更好地理解和应用这些模式,从而编写出更加高效、可扩展的Java程序。无论是初级开发者还是经验丰富的程序员,都应该不断探索和实践设计模式,以提升自己的...

    JAVA设计模式.chm

    本资源“JAVA设计模式.chm”聚焦于一种重要的设计模式——工厂模式。工厂模式是面向对象设计中的一种经典模式,它在Java程序中扮演着核心角色。 工厂模式的核心思想是提供一个创建对象的接口,但让实现这个接口的类...

    JAVA 设计模式 工厂模式 代理模式 迭代模式 责任链模式 源码

    以下是关于JAVA设计模式中提及的四种模式——工厂模式、代理模式、迭代器模式以及责任链模式的详细说明。 1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当创建...

    Java与模式——源码

    《Java与模式——源码》这个主题涉及到的是Java编程语言中的设计模式应用,以及如何通过源代码来理解和学习这些模式。设计模式是软件工程中的一种最佳实践,它们是解决常见问题的经验总结,使得代码更易读、易维护、...

    java设计模式之——策略模式

    在实际应用中,策略模式可以与其他设计模式结合使用,如工厂模式用于创建策略对象,或者使用组合模式来组织多个策略。同时,策略模式也可以用于替代继承,避免由于类的层次过多而导致的复杂性。 在阅读《Effective ...

    java设计模式经典教程

    ### Java设计模式经典教程知识点概览 #### 一、设计模式概述 设计模式是一种软件设计方法,它为软件开发者提供了一种标准化的方式去解决常见的软件设计问题。设计模式的使用可以提高代码的可读性和可维护性,同时...

    Java设计模式简单工厂模式

    **Java设计模式——简单工厂模式** 简单工厂模式是软件设计模式中的创建型模式之一,它提供了一种创建对象的最佳方式。在简单工厂模式中,一个专门的类(工厂类)负责创建其他类的实例,客户端通过工厂类来获取所需...

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式

Global site tag (gtag.js) - Google Analytics