Java 设计模式以虹猫蓝兔的故事讲解简单工厂模式

作者:桃花键神 时间:2021-10-19 21:20:08 

专栏介绍

本系列专栏会以虹猫蓝兔七侠传的故事为例来给大家详细分析所有模式,希望能给大家带来帮助!

本期介绍

模式: 简单工厂模式
案例: 一个天外陨石(抽象产品),三把剑(产品),
一个铸剑师(工厂)。
虹猫蓝兔莎莉分别找铸剑师造了三把剑。

什么是简单工厂模式

工厂模式的定义: 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。

1、按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。
2、我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”。

优点

1、工厂类包含必要的逻辑判断,可以决定在什么时候创建哪一个产品的实例。客户端可以免除直接创建产品对象的职责,很方便的创建出相应的产品。工厂和产品的职责区分明确。
2、客户端无需知道所创建具体产品的类名,只需知道参数即可。
3、也可以引入配置文件,在不修改客户端代码的情况下更换和添加新的具体产品类。

缺点

1、简单工厂模式的工厂类单一,负责所有产品的创建,职责过重,一旦异常,整个系统将受影响。且工厂类代码会非常臃肿,违背高聚合原则。
2、使用简单工厂模式会增加系统中类的个数(引入新的工厂类),增加系统的复杂度和理解难度
3、系统扩展困难,一旦增加新产品不得不修改工厂逻辑,在产品类型较多时,可能造成逻辑过于复杂
4、简单工厂模式使用了 static 工厂方法,造成工厂角色无法形成基于继承的等级结构。

应用场景

对于产品种类相对较少的情况,考虑使用简单工厂模式。使用简单工厂模式的客户端只需要传入工厂类的参数,不需要关心如何创建对象的逻辑,可以很方便地创建所需产品。

简单工厂的实现

案例的主要角色如下:
工厂(SimpleFactory):铸剑师
抽象产品(Product):天外陨石(铸剑的原材料)
具体产品(ConcreteProduct):长虹剑、冰魄剑、紫云剑

案例: 虹猫蓝兔莎莉分别找铸剑师打造三把剑,长虹剑、冰魄剑、紫云剑。铸剑师利用原材料天外陨石来铸造这三把剑。

Ss接口(天外陨石):

接口内声明了一个方法


public interface Ss {
   void show();
}

Aa类实现接口Ss(长虹剑):

实现Ss接口


public class Aa implements Ss {
   @Override
   public void show() {
       System.out.println("打造了一把长虹剑");

}
}

Bb类实现接口Ss(冰魄剑):

实现Ss接口


public class Bb implements Ss {
   @Override
   public void show() {
       System.out.println("打造了一把冰魄剑");

}
}

Cc类实现接口Ss(紫云剑):

实现Ss接口


public class Cc implements Ss {
   @Override
   public void show() {
       System.out.println("打造了一把紫云剑");
   }
}

Zz类(铸剑师):

声明一个Ss类型属性,声明一个abc方法,用来判断需要造哪把剑,返回一把剑对象。


public class Zz {
   private static Ss ss;

public Ss abc(String a) {
       if ("长虹剑".equals(a)) {
           ss = new Aa();
       } else if ("冰魄剑".equals(a)) {
           ss = new Bb();
       } else if ("紫云剑".equals(a)) {
           ss = new Cc();
       } else {
           System.out.println("铸剑失败");
       }
       return ss;
   }
}

Demo测试类:

new一个铸剑师(工厂对象),调用铸剑师的方法传入需要造的剑,返回一个剑的对象,然后调用剑对象中的方法看看造的对不对。


public class Demo {
   public static void main(String[] args) {
       Zz zz = new Zz();
       Ss aa = zz.abc("长虹剑");
       aa.show();
       Ss bb = zz.abc("冰魄剑");
       bb.show();
       Ss cc = zz.abc("紫云剑");
       cc.show();
       Ss dd = zz.abc("aa");
   }
}

Java 设计模式以虹猫蓝兔的故事讲解简单工厂模式

下期预告

模式: 普通工厂模式
案例: 七侠找铸剑师夫妇造剑

敬请期待

来源:https://jianshen.blog.csdn.net/article/details/123746505

标签:Java 简单工厂模式, 设计模式
0
投稿

猜你喜欢

  • Maven默认中央仓库(settings.xml 配置详解)

    2021-10-17 12:25:40
  • 解读JSONArray删除元素的两种方式

    2022-10-31 11:40:50
  • android Retrofit2+okHttp3使用总结

    2023-07-31 21:02:10
  • Asp.Net中MVC缓存详解

    2023-06-08 13:44:45
  • springBoot之如何获取接口请求数据和返回数据实现日志

    2023-11-23 10:43:58
  • java 开发中网络编程之IP、URL详解及实例代码

    2023-08-06 10:26:29
  • Java concurrency之公平锁(二)_动力节点Java学院整理

    2023-11-24 21:14:54
  • C#编程获取客户端计算机硬件及系统信息功能示例

    2023-08-09 01:57:15
  • C# 调用命令行执行Cmd命令的操作

    2022-08-03 10:43:26
  • 基于Android平台实现拼图小游戏

    2021-07-27 16:48:12
  • android通过拼音搜索中文的功能实现代码

    2022-03-12 04:48:17
  • spring boot mybatis枚举映射示例代码

    2023-03-01 11:45:51
  • Android设计模式系列之工厂方法模式

    2023-08-16 19:10:17
  • Mybatis利用OGNL表达式处理动态sql的方法教程

    2022-11-26 22:22:02
  • Java 逻辑控制详解分析

    2023-08-13 20:08:11
  • java Matcher匹配头尾截取替换字符串的案例

    2023-01-30 11:44:48
  • 详解Java8中的lambda表达式、::符号和Optional类

    2022-02-03 03:04:56
  • Java中OAuth2.0第三方授权原理与实战

    2021-09-27 01:48:57
  • 解决Spring国际化文案占位符失效问题的方法

    2022-10-20 23:42:23
  • 这一次搞懂Spring事务是如何传播的

    2022-12-27 07:06:53
  • asp之家 软件编程 m.aspxhome.com