设计模式 - 工厂模式

Posted xlxxcc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式 - 工厂模式相关的知识,希望对你有一定的参考价值。

  Factory Method(工厂模式):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。

  工厂方法模式分为三种,普通工厂模式,多个工厂方法模式,静态工厂方法模式。

意图

  定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。

适用性

   当一个类不知道它所必须创建的对象的类的时候。

  当一个类希望由它的子类来指定它所创建的对象的时候。

  当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

普通工厂模式

  普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

// 公共接口
public abstract class Window 
    public abstract void func();


// 实现类1
public class WindowBig extends Window 
    public void func() 
        System.out.println("This is Big Window !");
    


// 实现类2
public class WindowSmall extends Window 
    public void func() 
        System.out.println("This is Small Window !");
    


// 工厂类
public class Factory 
    public Window CreateWindow (String type) 
        if(type.equals("Big")) 
            return new WindowBig();
         else if(type.equals("Small")) 
            return new WindowSmall();
         else 
            return null;
        
    


// 测试类
public class FactoryTest 
    public static void main(String[] args) 
        Factory myFactory = new Factory();
        Window mySmallWindow = myFactory.CreateWindow("Small");
        mySmallWindow.func();
    

多个工厂方法模式

  多个工厂方法模式,是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。
  将普通工厂模式代码中的工厂类改成如下:

// 工厂类
public class Factory 
    public Window BigWindow() 
         return new WindowBig();
    
   public Window SmallWindow ()
         return new WindowSmall();
    


// 测试类
public class FactoryTest   
    public static void main(String[] args)   
        Factory factory = new Factory ();  
        WindowBig wb = factory.BigWindow();  
        wb.func();  
          
      

静态工厂方法模式

  静态工厂方法模式,将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。

// 工厂类
public class Factory 
    public static Window BigWindow() 
         return new WindowBig();
    
   public static Window SmallWindow ()
         return new WindowSmall();
    


// 测试类
public class FactoryTest   
    public static void main(String[] args)   
        WindowBig wb = Factory.BigWindow();  
        wb.func();  
          
      

总结

  总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。

以上是关于设计模式 - 工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

[设计模式]简单工厂和工厂方法模式适用场景

设计模式工厂方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式---工厂模式

抽象工厂模式

设计模式抽象工厂模式 ( 简介 | 适用场景 | 优缺点 | 产品等级结构和产品族 | 代码示例 )

java设计模式--工厂方法模式