前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【设计模式】工厂模式

【设计模式】工厂模式

作者头像
Li_XiaoJin
发布2022-06-10 18:11:57
1800
发布2022-06-10 18:11:57
举报
文章被收录于专栏:Lixj's BlogLixj's Blog

本篇介绍的是工厂模式,也是最简单我们最常使用的一种设计模式。

定义

工厂模式也称简单工厂模式,是创建型设计模式的一种,这种设计模式提供了按需创建对象的最佳方式。同时,这种创建方式不会对外暴露创建细节,并且会通过一个统一的接口创建所需对象。

工厂设计模式也是 Java 开发中常见的一种模式,它的主要意图是定义一个创建对象的接口,让其子类自己决定将哪一个工厂类实例化,工厂模式使创建过程延迟到子类中进行。

为了给代码结构提供扩展性,屏蔽每一个功能类中的具体实现逻辑。这种方式便于外部更加简单地调用,同时也是去掉众多if…else的最佳手段。

当然,这种设计模式也有一些缺点,需要治理。例如需要实现的类比较多、难以维护、开发成本高等,但这些问题都可以通过结合不同的设计模式逐步优化。

实践

以吃水果为例。

先定义一个 IFruit 接口;

代码语言:javascript
复制
public interface IFruit {

    void eat();

}

创建苹果和橙子的实现类 Apple.java 、 Orange.java

代码语言:javascript
复制
public class Apple implements IFruit {
    @Override
    public void eat() {
        System.out.println("吃苹果~~");
    }
}


public class Orange implements IFruit {
    @Override
    public void eat() {
        System.out.println("吃橙子~~");
    }
}

创建水果工厂实现类 FruitFactory.java

代码语言:javascript
复制
public class FruitFactory {
    public IFruit getFruit(String name) {
        if (name == null ) {
            throw new RuntimeException("不支持的类型");
        }
        if ("apple".equals(name)) {
            return new Apple();
        }
        if ("orange".equals(name)) {
            return new Orange();
        }
        throw new RuntimeException("不支持的类型");
    }
}

测试类

代码语言:javascript
复制
public class TestFactory {
    public static void main(String[] args) {
        FruitFactory factory = new FruitFactory();
        IFruit fruit1 = factory.getFruit("apple");
        fruit1.eat();

        IFruit fruit2 = factory.getFruit("orange");
        fruit2.eat();

    }
}

运行代码:

这里我只是举个最简单的例子,工作中遇到的场景可能会比较复杂,大家只要知晓其原理,使用起来也就轻车熟路了。万变不离其宗~

总结

从优化过程来看,工厂模式并不复杂。一旦理解和掌握,会发现它更加简单,同时也可以借助它提升开发效率。

它的优点如下:

  • 避免创建者与具体的产品逻辑耦合;
  • 满足单一职责,每一个业务逻辑实现都在自己所属的类中完成;
  • 满足开闭原则,无须更改使用调用方就可以在程序中引入新的产品类型。

缺点如下: 假如有非常多的类型,实现的子类会极速扩张,因此需要使用其他的模式进行优化,这些在后续的设计模式中会逐步介绍。

从案例入手学习设计模式往往要比只看理论知识更容易掌握,因为案例学习是缩短理论到实践的有效方式。如果已经有所收获,一定要尝试实操,找一段业务代码练习,以验证自己的想法。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义
  • 实践
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档