简单工厂模式

来源:互联网 发布:新东方网络课下载 编辑:程序博客网 时间:2024/06/02 07:07

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


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


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



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


java代码如下: 

 

Java代码  收藏代码
  1. package com.pattern.SimpleFactory;  
  2.   
  3. public class Factory  
  4.   
  5.     public TrafficMachine creator(String type) throws TypeErrorException{  
  6.         if(type.equals("Automobile")){  
  7.             return new Automobile();  
  8.         }else if (type.equals("Tractor"))  
  9.             return new Tractor();  
  10.         }else if (type.equals("Train"))  
  11.             return new Train();  
  12.         }else 
  13.             throw new TypeErrorException("not find "+type);  
  14.          
  15.      
  16.  
  17. package com.pattern.SimpleFactory;  
  18.   
  19. public class Automobile extends TrafficMachine{  
  20. @Override  
  21. public void traffic()  
  22. // TODO Auto-generated method stub  
  23.  
  24.  
  25. package com.pattern.SimpleFactory;  
  26.   
  27. public class Tractor extends TrafficMachine{  
  28. @Override  
  29. public void traffic()  
  30. // TODO Auto-generated method stub  
  31.  
  32.   
  33. public void plough(){  
  34.  
  35.  
  36. package com.pattern.SimpleFactory;  
  37.   
  38. public class Train extends TrafficMachine  
  39. private int nodeNum; //节数  
  40. private int trainNum; //车次  
  41. @Override  
  42. public void traffic()  
  43. // TODO Auto-generated method stub  
  44.  
  45. public int getNodeNum()  
  46. return nodeNum;  
  47.  
  48. public void setNodeNum(int nodeNum)  
  49. this.nodeNum nodeNum;  
  50.  
  51. public int getTrainNum()  
  52. return trainNum;  
  53.  
  54. public void setTrainNum(int trainNum)  
  55. this.trainNum trainNum;  
  56.  
  57.  
  58. package com.pattern.SimpleFactory;  
  59.   
  60. public abstract class TrafficMachine  
  61. public float power  
  62. public float load  
  63. public abstract void traffic();  
  64.  
  65. package com.pattern.SimpleFactory;  
  66.   
  67. public class TypeErrorException extends Exception{  
  68.   
  69. private static final long serialVersionUID 562037380358960152L;  
  70. public TypeErrorException(String message)  
  71. super(message);  
  72. // TODO Auto-generated constructor stub  
  73.  
  74.  

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

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

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

0 0
原创粉丝点击