java设计模式---三种工厂模式

工厂模式提供建立对象的接口。java

工厂模式分为三类:简单工厂模式(Simple Factory), 工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory).
GOF在《设计模式〉中将工厂模式分为两类:工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory)。
设计模式

1. 简单工厂模式(Simple Factory)
简单工厂模式又叫作静态工厂方法模式。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该建立哪个产品类(这些产品类继承自一个父类或接口)的实例。
该模式中包含的角色及职责:
工厂(Creator)角色:它是简单工厂模式的核心,负责实现建立全部实例的内部逻辑。工厂类能够被外界直接调用,建立所须要的产品对象。
抽象产品角色:它负责描述全部实例所共有的公共接口。
具体产品角色:是简单工厂模式的建立目标,全部建立的对象都是充当这个角色的某个具体类的实例。
ide

缺点:在工厂类中集中了全部实例的建立逻辑,违反了高内聚责任分配原则,将所有建立逻辑集中到了一个工厂类中;对系统的维护和扩展不利;设计

使用场景:负责建立的对象比较少;客户只知道传入工厂类的参数,对于如何建立对象的逻辑不关心;容易违反高内聚责任分配原则,因此只在很简单的状况下应用;code

类图:对象

 

 

 

 

 

 

 

 

 

 

 

实例:继承

//抽象产品角色  
public interface IProduct  
{  
    public void saleProduct();  
}  
//具体产品角色  
public class Product_A implements IProduct  
{  
    @Override  
    public void saleProduct(){  
        ...          
    }  
  
}  
//具体产品角色  
public class Product_B implements IProduct  
{  
    @Override  
    public void saleProduct(){  
        ...          
    }  
  
}  
//工厂角色  
public class Creator  
{  
    public IProduct createProduct(int productFlag){  
        switch(productFlag){  
            case 1:  
                return new Product_A();  
            case 2:  
                return new Product_B();  
            default:  
                return null;   
        }  
    }  
}  

 

2. 工厂方法模式(Factory Method)
工厂方法模式是简单工厂方法模式的衍生,它的核心工厂类再也不负责产品的建立,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,使得系统能够在不修改具体工厂角色的状况下引用新的产品。
在这个模式中,一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品。
工厂方法模式是最典型的模板方法模式(Template Method Pattern)应用。
接口

 

该模式中包含的角色及职责: 产品

 

抽象工厂(Creator)角色:工厂方法模式的核心,任何在模式中建立的对象的工厂必须实现这个接口。
具体工厂(Concrete Creator)角色:实现抽象工厂接口的具体工厂类,包含应用程序的逻辑。
抽象产品(Product)角色:产品对象的共同父类或共同拥有的接口。
具体产品(Concrete Product)角色:实现了抽象产品角色定义的接口,其具体产品有专门的具体工厂建立。
it

使用场景:
对于某个产品,调用者清楚知道应该使用哪一个具体工厂服务,实例化该具体工厂,生产出具体的产品来;
只是须要一种产品,对于那个工厂生产的并不关心,最终选用哪一个具体工厂由生产者一方决定,它根据当前系统的状况来实例化一个具体的工厂返回给使用者,这个决策过程对于使用者来讲是透明的。

 

类图:

 

 

 

 

 

 

 

 

 

 

 

 

实例:

//抽象工厂  
public interface Creator{  
       public Light factory();  
}  
//抽象产品  
public interface Light{  
    public void TurnOn();  
    public void TrunOff();  
}  
//具体产品  
public class BullbLight implements Light{  
    public void TurnOn(){  
    }  
  
    public void TrunOff(){  
    }  
}  
//具体产品  
public class TubeLight implements Light{  
    public void TurnOn(){  
    }  
  
    public void TrunOff(){  
    }  
}  
//具体工厂  
public class BullbCreator implements Creator{  
       public Light factory(){  
        return new BullbLight();  
    }  
}  
//具体工厂  
public class TubeCreator implements Creator{  
       public Light factory(){  
        return new TubeLight();  
    }  
}  
public class Client{  
       public static void main(String[] args){  
              Creator create = new BullbCreator();  
          Light bullbLight = create.factory();  
          bullbLight.TurnOn();  
  
              Creator create1 = new TubeCreator();  
          Light tubebLight = create.factory();  
          tubebLight.TurnOn();  
  
       }  
}  

 

3. 抽象工厂模式(Abstract Factory)
抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式能够向客户端提供一个接口,使客户端在没必要指定产品的具体状况下,建立多个产品族中的产品对象。

 

类图:

 

 

实例:

//抽象工厂角色  
public interface AbstractFactory{  
  public ProductA createProductA();  
  public ProductB createProductB();  
}  
  
//抽象产品类A  
public interface AbstractProductA  
{  
}  
  
//抽象产品类B  
public interface AbstractProductB  
{  
}  
  
//具体产品类ProdcutA1  
public class ProductA1 implements AbstractProductA   
{  
  public ProductA1()  
  {  
  }  
}  
  
//具体产品类ProdcutA2  
public class ProductA2 implements AbstractProductA  
{  
  public ProductA2()  
  {  
  }  
}  
  
//具体产品类ProductB1  
public class ProductB1 implements AbstractProductB  
{  
  public ProductB1()  
  {  
  }  
}   
  
//具体产品类ProductB2  
public class ProductB2 implements AbstractProductB  
{  
  public ProductB2()  
  {  
  }  
}  
  
//具体工厂类1  
public class ConcreteFactory1 implements AbstractFactory{  
  public AbstractProductA createProductA(){  
  return new ProductA1();  
  }  
  public AbstractProductB createProductB(){  
  return new ProductB1();  
    }  
}  
  
//具体工厂类2  
public class ConcreteFactory2 implements AbstractFactory{  
  public AbstractProductA createProductA(){  
  return new ProductA2();  
  }  
  public AbstractProductB createProductB(){  
  return new ProductB2();  
  }  
}  
相关文章
相关标签/搜索