`
youyu4
  • 浏览: 440468 次
社区版块
存档分类
最新评论

Java设计模式三:抽象工厂模式(Abstract Factory)/工厂方法(Factory Method)

 
阅读更多
工厂模式提供创建对象的接口。

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

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

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

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

类图:

 

 

实例:
//抽象产品角色
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)角色:实现了抽象产品角色定义的接口,其具体产品有专门的具体工厂创建。

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

 

类图:



  

 实例:

//抽象工厂
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 Creator{
  public AbstractProductA createProductA(){
  return new ProductA2();
  }
  public AbstractProductB createProductB(){
  return new ProductB2();
  }

  • 大小: 77.4 KB
  • 大小: 10.8 KB
  • 大小: 85.4 KB
分享到:
评论

相关推荐

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    Java设计模式是面向对象编程...在阅读《Chapter1___Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)》的相关资料时,你可以更深入地学习这些模式的细节,包括适用场景、优缺点以及如何在实际项目中实现。

    工厂方法和抽象工厂——Factory Method & Abstract Factory

    在软件设计模式中,工厂方法(Factory Method)和抽象工厂(Abstract Factory)是两种非常重要的创建型模式。它们主要用于解决对象实例化的问题,提供了一种封装对象创建过程的方法,使得代码更加灵活,易于扩展和...

    创建型-抽象工厂模式(Abstract Factory)

    此外,抽象工厂模式还可以与其他设计模式结合使用,比如工厂方法模式(Factory Method Pattern),在某些情况下,可以将抽象工厂模式的抽象工厂类设计为工厂方法模式,让子类决定实例化哪一个类。同时,抽象工厂模式...

    设计模式之工厂方法、简单工厂、抽象工厂

    工厂方法、简单工厂和抽象工厂是创建型设计模式的三种不同形式,它们都关注于对象的创建过程,但各有其特点和适用场景。 1. **工厂方法(Factory Method)**: 工厂方法模式定义了一个创建对象的接口,但让子类...

    设计模式之工厂方法

    工厂方法(Factory Method)是设计模式中的一员,属于创建型模式,它的核心思想是定义一个用于创建对象的接口,让子类决定实例化哪一个类。这个接口就是工厂方法,让子类决定实例化哪一个类,工厂方法让类的实例化...

    java设计模式之三大工厂模式

    本篇文章将深入探讨Java中的三大工厂模式:简单工厂模式、工厂方法模式和抽象工厂模式。 首先,简单工厂模式(Simple Factory Pattern)是最基础的一种,它提供一个静态方法来创建对象,根据传入的参数类型决定创建...

    工厂方法模式和抽象工厂模式

    在软件设计模式中,工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)是两种常用的创建型设计模式,它们都属于“工厂”家族,但有着不同的应用场景和目标。 工厂方法模式的核心...

    java三种工厂模式文档+三个实例.rar

    2. **工厂方法模式(Factory Method Pattern)**: - 工厂方法模式将对象的创建委托给子类。在抽象工厂类中定义一个创建产品的方法,但不实现,而是由具体的子类去实现。这样,当需要创建新产品时,只需要添加新的...

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    1. **创建型模式**:包括单例(Singleton)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者(Builder)和原型(Prototype)。这些模式关注对象的创建过程,使得代码更加灵活,易于管理和扩展。...

    设计模式之-工厂方法-FactoryMethod

    3. 抽象工厂(Abstract Factory):这是工厂方法模式的核心,它声明了创建产品的接口。每个子类可以提供一个实现,用于创建相应的产品。 4. 具体工厂(Concrete Factory):实现了抽象工厂接口,提供了具体的产品...

    工厂方法模式(FactoryMethod)

    工厂方法模式是面向对象设计模式中的行为型模式之一,它提供了一种创建对象的最佳方式。在工厂方法模式中,一个工厂类负责创建对象,而具体的创建过程被延迟到了子类中,使得子类可以在不修改原有代码的基础上决定...

    20051115pm--C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)

    抽象工厂模式(Abstract Factory)是一种创建型设计模式,用于提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。这种模式的关键在于,它允许客户端代码与具体的实现细节解耦,使得添加新的产品...

    《Java设计模式》课后习题参考答案-刘伟(20180723).pdf

    c) 工厂方法模式(FactoryMethod) 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。JDK中的例子有: - java.lang.Object#toString(),返回对象的字符串表示。 - java.lang.Class#new...

    java设计模式期末考试选择题100道

    适合Java设计模式期末考试选择题复习,形式如下: 10.(单选题)Facade(外观)模式的意图是 正确答案: A A.希望简化现有系统的使用方法...工厂方法模式(Factory Method) C.适配器模式(Adapter) D.单例模式(Singleton)

    创建型模式之工厂方法模式(Factory Method Pattern)

    1. 抽象工厂(Abstract Factory):这是工厂方法模式的核心接口,它声明了一组用于创建产品的公共方法。抽象工厂通常为抽象类或接口。 2. 具体工厂(Concrete Factory):实现了抽象工厂接口,提供具体的产品实例。...

    简单工厂模式,工厂方法模式,抽象工厂模式

    工厂方法模式(Factory Method Pattern)是面向对象的设计模式,它定义了一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。这样,工厂方法将实例化操作推迟到子类中,实现了对类的抽象,提高了代码的...

    Java设计模式 Java设计模式

    根据给定的信息,本文将对Java设计模式中的工厂方法(Factory Method)模式进行详细解析,并进一步探讨抽象工厂(Abstract Factory)模式的相关应用。 ### 工厂方法模式 #### 概念 工厂方法模式是一种创建型设计...

    C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式)

    本文将深入探讨面向对象设计中的“工厂方法模式”,这是一种创建型设计模式,它提供了一种在父类中定义创建对象的接口,但允许子类决定实例化哪个类。这种模式在C#中广泛应用,能有效提高代码的灵活性和可扩展性。 ...

    Java设计模式之工厂模式(Factory)

    2. **工厂方法模式(Factory Method)**:用于处理不同类型的对象创建过程,提供了一种接口来创建一系列相关或相互依赖的对象。 3. **抽象工厂模式(Abstract Factory)**:不仅关注单一类别的对象创建,还关注一...

Global site tag (gtag.js) - Google Analytics