`
zftzyw
  • 浏览: 1162 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

静态工厂方法模式

阅读更多
1 抽象产品角色(即父类)
package com.diermeng.designPattern.SimpleFactory;

/*
* 产品的抽象接口
*/
public interface Food {
    /*
     * 获得相应的食物
     */
    public void get();
}
2 具体产品(即子类)
接下来建立具体的产品:麦香鸡和薯条
package com.diermeng.designPattern.SimpleFactory.impl;
import com.diermeng.designPattern.SimpleFactory.Food;

/*
* 麦香鸡对抽象产品接口的实现
*/
public class McChicken implements Food{
    /*
     * 获取一份麦香鸡
     */
    public void get(){
        System.out.println("我要一份麦香鸡");
    }
}
package com.diermeng.designPattern.SimpleFactory.impl;
import com.diermeng.designPattern.SimpleFactory.Food;

/*
* 薯条对抽象产品接口的实现
*/
public class Chips implements Food{
    /*
     * 获取一份薯条
     */
    public void get(){
        System.out.println("我要一份薯条");
    }
}
3 工厂角色(即普通类提供了创建其他类的方法)
现在建立一个食物加工工厂:
package com.diermeng.designPattern.SimpleFactory.impl;
import com.diermeng.designPattern.SimpleFactory.Food;


public class FoodFactory {

    public static Food getFood(String type) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
        if(type.equalsIgnoreCase("mcchicken")) {
            return McChicken.class.newInstance();

        } else if(type.equalsIgnoreCase("chips")) {
            return Chips.class.newInstance();
        } else {
            System.out.println("哎呀!找不到相应的实例化类啦!");
            return null;
        }


    }
}
4,用法
最后我们建立测试客户端:
package com.diermeng.designPattern.SimpleFactory.client;
import com.diermeng.designPattern.SimpleFactory.Food;
import com.diermeng.designPattern.SimpleFactory.impl.FoodFactory;

/*
* 测试客户端
*/
public class SimpleFactoryTest {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {

        //实例化各种食物
        Food mcChicken = FoodFactory.getFood("McChicken");
        Food chips = FoodFactory.getFood("Chips");
        Food eggs = FoodFactory.getFood("Eggs");

        //获取食物
        if(mcChicken!=null){
            mcChicken.get();
        }
        if(chips!=null){
            chips.get();
        }
        if(eggs!=null){
            eggs.get();
        }


    }
}
简单工厂模式的优缺点分析:
       优点:工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。
      缺点:由于工厂类集中了所有实例的创建逻辑,这就直接导致一旦这个工厂出了问题,所有的客户端都会受到牵连;而且由于简单工厂模式的产品室基于一个共同的 抽象类或者接口,这样一来,但产品的种类增加的时候,即有不同的产品接口或者抽象类的时候,工厂类就需要判断何时创建何种种类的产品,这就和创建何种种类 产品的产品相互混淆在了一起,违背了单一职责,导致系统丧失灵活性和可维护性。而且更重要的是,简单工厂模式违背了“开放封闭原则”,就是违背了“系统对 扩展开放,对修改关闭”的原则,因为当我新增加一个产品的时候必须修改工厂类,相应的工厂类就需要重新编译一遍。
      总结一下:简单工厂模式分离产品的创建者和消费者,有利于软件系统结构的优化;但是由于一切逻辑都集中在一个工厂类中,导致了没有很高的内聚性,同时也违 背了“开放封闭原则”。另外,简单工厂模式的方法一般都是静态的,而静态工厂方法是无法让子类继承的,因此,简单工厂模式无法形成基于基类的继承树结构。
分享到:
评论

相关推荐

    工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

    工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...

    深入了解工厂模式&工厂方法&抽象工厂

    1. 简单工厂模式:也称为静态工厂方法模式,它通过一个静态方法来创建对象。在这个例子中,`FruitGardener` 类就是简单工厂,它根据输入的字符串(如 "apple"、"strawberry" 或 "grape")返回相应的 `Fruit` 实例(`...

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

    简单工厂模式是一种静态工厂方法,它提供一个公共的工厂类来创建对象。这个工厂类根据传入的参数或者条件来决定创建哪种类型的实例。在简单工厂模式中,通常有一个中心工厂类,它负责知道如何创建各种产品。这种模式...

    工厂方法模式

    进一步,静态工厂方法模式将工厂方法设为静态,这样无需创建`Factory`类的实例就可以直接调用工厂方法创建对象。这降低了对象间的耦合度,同时也简化了使用,因为不需要通过`new`关键字创建工厂对象。 然而,以上两...

    head first工厂模式

    1. **简单工厂模式**:也称为静态工厂方法模式,它通过一个静态方法来创建对象,这个静态方法就是“工厂”。客户端直接调用工厂的静态方法获取所需对象,不需要了解对象的具体创建过程。简单工厂模式适用于产品种类...

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

    - 简单工厂模式是一种静态工厂方法模式,它包含一个静态工厂类,负责创建对象。在这个例子中,可能有一个名为`Factory`的类,其中包含一个静态方法,如`createInstance()`,这个方法根据输入参数返回相应的对象实例...

    工厂模式代码

    1. 简单工厂模式(Simple Factory Pattern):也称为静态工厂方法模式,通过一个静态方法来创建对象,该静态方法根据传入的参数返回不同的实例。 2. 工厂方法模式(Factory Method Pattern):属于多态性设计模式,...

    实验四:工厂模式.rar

    1. **简单工厂模式**:也称为静态工厂方法模式,它包含一个知道如何创建对象的静态工厂方法。这个静态方法根据输入参数来决定返回哪个具体类的实例。这种方式的缺点是工厂类与产品类耦合度过高,不易于扩展。 2. **...

    关于工厂模式的简单例子

    简单工厂模式是工厂模式的一个具体实现,也被称为静态工厂方法模式。在这种模式中,通常由一个静态方法来创建产品对象,这个静态方法可以根据传入的参数或者特定条件来决定返回哪个具体类型的产品。简单工厂模式的...

    工厂模式代码实现_Java

    1. **简单工厂模式**:也称为静态工厂方法模式,通常由一个静态方法创建对象。这种方式适用于产品种类较少且不会频繁扩展的情况。例如,在Java中,`Integer.valueOf()`方法就是一个简单的工厂模式应用,根据传入的...

    Java设计模式04简单工厂模式.pdf

    简单工厂模式,又称为静态工厂方法模式,是一种类创建型模式。在这一模式下,系统中存在一个特殊的类,被称为“工厂”,它负责根据输入的参数创建并返回特定类型的对象。这些对象通常共享一个公共的接口或者基类,但...

    JAVA设计模式之3种工厂模式.doc

    在Java中,这个工厂类通常是静态的,因此也被称为静态工厂方法模式。简单工厂模式的角色包括: 1. **工厂类(Creator)角色**:这个角色负责实际的实例化操作,它通常包含一个静态方法,根据输入参数来决定创建哪种...

    设计模式在android中的应用之1,简单工厂模式

    简单工厂模式(Simple Factory Pattern)是一种静态工厂方法模式,它包含一个工厂类,负责根据输入参数创建相关的产品对象。工厂类知道如何创建对象,而客户端只需知道如何使用对象,无需关心对象是如何被创建的。 ...

    工厂模式代码实现

    简单工厂模式是一种静态工厂方法模式,它包含一个工厂类,负责创建特定类型的对象。工厂类通常包含一个公共静态方法,该方法根据输入参数返回一个具体的产品实例。这种模式将对象的创建与使用分离,使得客户端代码...

    java设计模式之工厂模式(3种完整免费提供).pdf

    简单工厂模式,也称为静态工厂方法模式,其核心是一个工厂类,根据输入的不同条件创建不同类型的实例。这个工厂类通常是具体的Java类,它包含了创建对象的逻辑。简单工厂模式的角色包括工厂类(Creator)、抽象产品...

    [创建型模式] head first 设计模式之工厂模式(Factory)

    1. **简单工厂模式**:也称为静态工厂方法模式,它包含一个静态工厂方法,用于创建对象。静态工厂方法并不属于某个特定的类,而是属于一个公共的类,通常是单例的。这种方式适用于产品种类较少且相对固定的场景。 2...

    JavaEE spring静态工厂创建实例

    本篇将详细介绍如何在Spring中使用静态工厂方法来创建实例。 首先,让我们理解什么是静态工厂方法。静态工厂方法是类中的一个静态成员方法,它不依赖于类的实例,而是通过类名直接调用,返回一个对象。这种方法与...

    JAVA设计模式之工厂模式

    简单工厂模式,也称为静态工厂方法模式,是一种较为简单的工厂模式实现方式。在这个模式中,我们定义一个工厂类,该类包含一个静态方法来实例化不同的类,这些类通常具有相同的接口或抽象类作为父类。 **特点**: -...

    java(工厂设计模式)

    1. **简单工厂模式**(Simple Factory Pattern):这是最基础的工厂模式,也称为静态工厂方法模式。它由一个静态工厂类负责创建一系列相关的对象,这些对象通常具有共同的接口。 2. **工厂方法模式**(Factory ...

Global site tag (gtag.js) - Google Analytics