程序员人生 网站导航

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

栏目:php教程时间:2017-02-15 09:11:30

学习Java的同学注意了!!! 
学习进程中遇到甚么问题或想获得学习资源的话,欢迎加入Java学习交换群,群号码:183993990  我们1起学Java!


工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应当实例化那1个类。

工厂模式的形态
工厂模式主要用1下几种形态:
1:简单工厂(Simple Factory)。
2:工厂方法(Factory Method)。
3:抽象工厂(Abstract Factory)。

简单工厂(Simple Factory)
又叫静态工厂,是工厂模式3中状态中结构最为简单的。主要有1个静态方法,用来接受参数,并根据参数来决定返回实现同1接口的不同类的实例。我们来看1个具体的例子:
假定1家工厂,几生产洗衣机,有生产冰箱,还有空调等等..
我们先为所有产品定义1个共同的产品接口
  1. public interface Product{} 

接着我们让这个工厂的所有产品都必须实现此接口
  1. public class Washer implements Product{ 
  2.    public Washer(){ 
  3.        System.out.println("洗衣机被制造了"); 
  4.    } 
  5.  
  6. public class Icebox implements Product{ 
  7.    public Icebox(){ 
  8.        System.out.println("冰箱被制造了"); 
  9.    } 
  10.  
  11. public class AirCondition implements Product{ 
  12.    public Icebox(){ 
  13.        System.out.println("空调被制造了"); 
  14.    } 

接下来我们来写1个工厂类,有它来负责生产以上的产品
  1. public class SimpleFactory { 
  2.      
  3.     public static Product factory(String productName) throws Exception{ 
  4.         if(productName.equals("Washer")){ 
  5.             return new Washer(); 
  6.         }else if(productName.equals("Icebox")){ 
  7.             return new Icebox(); 
  8.         }else if(productName.equals("AirCondition")){ 
  9.             return new AirCondition(); 
  10.         }else
  11.             throw new Exception("没有该产品"); 
  12.         } 
  13.     } 

好了,有了这个工厂类,我们就能够开始下订单了,SimpleFactory将根据不同的订单类决定生产甚么产品。
  1. public static void main(String[] args) { 
  2.     try { 
  3.               SimpleFactory.factory("Washer"); 
  4.               SimpleFactory.factory("Icebox"); 
  5.               SimpleFactory.factory("AirCondition"); 
  6.             } catch (Exception e) { 
  7.         e.printStackTrace(); 
  8.     } 

由上面的代码可以看出,简单工厂的核心就是1个SimpleFactory类,他具有必要的逻辑判断能力和所有产品的创建权利,我们只需要向把订单给他,就可以得到我们想要的产品。这使用起来似乎非常方便。
但,实际上,这个SimpleFactory有很多的局限。首先,我们每次想要增加1种新产品的时候,都必须修改SimpleFactory的原代码。其次,当我们具有很多很多产品的时候,而且产品之间又存在复杂的层次关系的时候,这个类必须具有复杂的逻辑判断能力,其代码量也将不断地激增,这对以后的保护简直就是恐怖两个字...
还有就是,全部系统都严重依赖SimpleFactory类,只要SimpleFactory类1出问题,系统就进入不能工作的状态,这也是最为致命的1点....
以上的不足将在工厂模式的另外两种状态中得到解决。

工厂方法(Factory Method)
上面的代码告知我们,简单工厂其实不简单,它是全部模式的核心,1旦他出了问题,全部模式都将受影响而不能工作,为了下降风险和为往后的保护、扩大做准备,我们需要对它进行重构,引入工厂方法
工厂方法为工厂类定义了接口,用多态来削弱了工厂类的职能,以下是工厂接口的定义:
  1. public interface Factory{ 
  2.   public Product create(); 

我们再来定义1个产品接口
  1. public interface Product{} 

1下是实现了产品接口的产品类
  1. public class Washer implements Product{ 
  2.    public Washer(){ 
  3.        System.out.println("洗衣机被制造了"); 
  4.    } 
  5.  
  6. public class Icebox implements Product{ 
  7.    public Icebox(){ 
  8.        System.out.println("冰箱被制造了"); 
  9.    } 
  10.  
  11. public class AirCondition implements Product{ 
  12.    public Icebox(){ 
  13.        System.out.println("空调被制造了"); 
  14.    } 

接下来,就是工厂方法的核心部份,也就是具体创建产品对象的具体工厂类,
  1. //创建洗衣机的工厂 
  2. public class CreateWasher implements Factory{ 
  3.     public Product create(){ 
  4.           return new Washer(); 
  5.     } 
  6.  
  7. //创建冰箱的工厂 
  8. public class CreateIcebox implements Factory{ 
  9.     public Product create(){ 
  10.           return new Icebox(); 
  11.     } 
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐