理解设计模式之-简单工厂模式

本文介绍了简单工厂模式的定义、基本元素及其应用实例。通过果汁加工的例子详细展示了如何使用该模式来实现不同产品的创建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下观点仅是个人对于简单工厂模式的理解,如有错误的地方欢迎大家评论指出。

目录

定义

基本元素

示例代码

示例类图

优缺点总结


 

定义:

官方给出的定义是,通过不同的参数创建不同的对象。这个解释貌似实现起来也没有什么难度,这一点通过这个模式的名称就可以看出。另外需要指出的是,简单工厂模式并不在基本设计模式范围内,但是目前依然被广泛使用,比如一些第三方框架和部分Android源码

基本元素

通过模式名称可以了解到,这个模式的基本元素肯定是要包括一个工厂类(FactoryClass)和调用类(Client)的。Client类作为调用者向工厂类传递参数,工厂类用于根据Client类传入的不同参数构建不同的对象(Product)。除了工厂类和调用类之外,简单工厂模式的基本元素还包括最终要通过工厂类创建的各个对象,以及这些对象的抽象类(或者接口)。

示例代码

下面通过一个果汁加工厂的示例来演示一下简单工厂模式。按照上面介绍的基本元素,我们需要一个工厂类FriutFactory,一个水果的接口Friut,两个果汁接口的实现类AppleJuice和OrangeJuice,以及一个调用类Client

接口friut代码如下:friut.java

package simplefactory;

public interface Friut {
    void createJuice();
}

friut的两个实现类代码如下AppleJuice.java&OrangeJuice.java

package simplefactory;

public class AppleJuice implements Friut{
    private String name;

    public AppleJuice(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    @Override
    public void createJuice() {
        System.out.println("苹果汁");
    }
}
package simplefactory;

public class OrangeJuice implements Friut {
    private String name;

    public OrangeJuice(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    @Override
    public void createJuice() {
        System.out.println("橘子汁");
    }
}

然后创建FriutFactory.java代码如下:

package simplefactory;

public class FriutFactory {

    public static Friut createFriut(String name){
        Friut friut = null;
        if("apple".equals(name)){
            friut = new AppleJuice("苹果");
        }
        if("orange".equals(name)){
            friut = new OrangeJuice("橘子");
        }
        return friut;
    }
}

最后通过client类传递不同的参数,生产不同的果汁:

package simplefactory;

public class Client {
    public static void main(String[] args) {
//        FriutFactory.createFriut("apple").createJuice();
        FriutFactory.createFriut("orange").createJuice();
    }
}

示例类图

优缺点总结

    优点 调用和实现过程分离,调用者并不需要关注内部的实现过程

    缺点   违反开闭原则,当有新增加产品的需求时需要增加具体的实现类,并且需要修改工厂类来匹配新增加的产品。当产品较多时工厂类的逻辑会变得越来越复杂,并且由于有过多的条件判断,会导致工厂类的可读性变差。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值