工厂设计模式

Posted Mr_madong

tags:

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

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

  1. 简单工厂(Simple Factory)。
  2. 工厂方法(Factory Method)。
  3. 抽象工厂(Abstract Factory)。

一、简单工厂(Simple Factory)
又称静态工厂,是工厂三种形态中最为简单的。其组成由一个静态方法,用来接收参数,并根据参数来决定返回实现统一接口的不用类的实例。
范例:
假设一家工厂,几生产洗衣机,有生产冰箱,还有空调等等..
1、首先为所有产口定义一个共同的产品接口;

interface Product

接着我们让这个工厂的所有产品都必须实现此接口。

class Washer implements Product
    public Washer()
        System.out.println("洗衣机被制造了") ;
    

 class Icebox implements Product
    public Icebox()
        System.out.println("冰箱被制造了") ;
    

 class AirCondition implements Product
    public AirCondition()
        System.out.println("空调被制造了") ;
    

接下来我们来写一个工厂类,由它来负责生产以上的产品。

class SimpleFactory
    public static Product factory(String productName) throws Exception
    if(productName.equals("Washer"))
        return new Washer() ;
    else if(productName.equals("Icebox"))
        return new Icebox() ;
    else if(productName.equals("AirCondition"))
        return new AirCondition() ;
    else
        throw new Exception("没有该产品") ;
    
       

SimpleFactory将根据不同的订单类决定生产什么产品(主类)

public class Products

    public static void main(String args[])
        try
            SimpleFactory.factory("Washer");
            SimpleFactory.factory("Icebox");
            SimpleFactory.factory("AirCondition");
        catch(Exception e)
            e.printStackTrace() ;
        

    

程序执行结果
工厂设计模式_Java

总结:仔细观察上面程序,简单共产的核心就是其中的SimpleFactory类,这个类要拥有判断能力。
简单工厂有局限性,一旦核心SimpleFactory类出现故障,那么整个程序就瘫痪了。

二、工厂方法(Factory Method)
由于简单类的局限性(核心SimpleFactory类容易出现问题),为了降低风险和有利于日后的维护、拓展。引入工厂方法.

工厂方法接口定义:

interface Factory 
  public Product create(); 
 

定义接口:

interface Product

实现接口的产品类:

class Washer implements Product 
   public Washer() 
       System.out.println("洗衣机被制造了"); 
    
 

class Icebox implements Product 
   public Icebox() 
       System.out.println("冰箱被制造了"); 
    
 

class AirCondition implements Product 
   public Icebox() 
       System.out.println("空调被制造了"); 
    
 

工厂方法的核心,也就是创建产品对象的具体工厂类:

//创建洗衣机的工厂 
 class CreateWasher implements Factory 
    public Product create() 
          return new Washer(); 
     
 

//创建冰箱的工厂 
 class CreateIcebox implements Factory 
    public Product create() 
          return new Icebox(); 
     
 

//创建空调的工厂 
 class CreateAirCondition implements Factory 
    public Product create() 
          return new AirCondition(); 
     
 

主类定义:

public class Products

    public static void main(String args[])
        try
            Factory W = new CreateWasher() ;
            Factory I = new CreateIcebox() ;
            Factory C = new CreateAirCondition() ;
            W.create() ;
            I.create() ;
            C.create() ;

        catch(Exception e)
            e.printStackTrace() ;
        

    

总结:
工厂方法和简单工厂的主要区别是,简单工厂是把创建产品的职能都放在一个类里面,而工厂方法则把不同的产品放在实现了工厂接口的不同工厂类里面这样就算其中一个工厂类出了问题,其他工厂类也能正常工作,互相不受影响,以后增加新产品,也只需要新增一个实现工厂接口工厂类,就能达到,不用修改已有的代码。

抽象方法:
抽象工厂:意的意图在于创建一系列互相关联或互相依赖的对象。
1、冰箱-A
2、冰箱-B
1、洗衣机-A
2、洗衣机-B

创建冰箱和洗衣机的接口:

//洗衣机接口
interface Washer
//冰箱接口
interface Icebox

然后分别创建这两个接口所对应的产品:

//洗衣机-A
class WasherA implements Washer

    public WasherA()
        System.out.println("洗衣机-A被制造") ;
    

//洗衣机-B
class WasherB implements Washer

    public WasherB()
        System.out.println("洗衣机-B被制造") ;
    


//冰箱-A
class IceboxA implements Icebox

    public IceboxA()
        System.out.println("冰箱-A被制造") ;
    

//冰箱-B
class IceboxB implements Icebox

    public IceboxB()
        System.out.println("冰箱-B被制造") ;
    

再然后,创建生产产品的工厂,首先要定义工厂的行为接口:

interface Factory

    Washer createWasher() ;
    Icebox createIcebox() ;

创建工厂类,让不同的工厂负责生产不同的产品(分类):

//创建型号为A的产品工厂
class FactoryA implements Factory

    //创建洗衣机-A
    public Washer createWasher()
        return new WasherA() ;
    
    //创建冰箱-A
    public Icebox createIcebox()
        return new IceboxA() ;
    


//创建型号为B的产品工厂
class FactoryB implements Factory

    //创建洗衣机-B
    public Washer createWasher()
        return new WasherB() ;
    
    //创建冰箱-B
    public Icebox createIcebox()
        return new IceboxB() ;
    

主类实现:

public class Products

    public static void main(String args[])

        Factory a = new FactoryA() ;
        Factory b = new FactoryB() ;

        a.createWasher();
        a.createIcebox();

        b.createWasher();
        b.createWasher();
    

最后的总结:通过今天对工厂设计模式的进一步学习,了解了皮毛,看视频学会了设计模式的基本定义格式,再通过别人的博客学到了这三种模式,但是还是一知半解,希望以后再工作中进一步加深学习。

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

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

设计模式学习——简单工厂模式工厂模式抽象工厂模式

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

设计模式-简单工厂工厂方法模式抽象工厂模式详解

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式之工厂方法和抽象工厂