`

工厂模式

 
阅读更多

工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。

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

public interface IProduct{

    public void saleProduct();

}

public class Product_A implements IProduct{

    public void saleProduct(){ }

}

public class Product_B implements IProduct{

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

//抽象工厂

public interface Creator{

       public Light factory();

}

//抽象产品

public interface Light{

    public void TurnOn();

}

//具体产品

public class BullbLight implements Light{

    public void TurnOn(){

    }

}

//具体产品

public class TubeLight implements Light{

    public void TurnOn(){

    }

 

}

//具体工厂

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();

 

              Creator create1 = new TubeCreator();

          Light tubebLight = create.factory();

 

       }

}

3.抽象工厂模式,抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。

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 Creator{

  public AbstractProductA createProductA(){

  return new ProductA2();

  }

  public AbstractProductB createProductB(){

  return new ProductB2();

  }

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics