设计模式——简单工厂模式

2023-11-19

        简单工厂模式定义为:简单工厂模式又称为静态工厂方法模型,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

        简单工厂模式结构图:

        

        简单工厂模式包含如下角色:

                1.Factory(工厂角色)

                   工厂角色即工厂类,它是简单工厂模式的核心,负责实现创建所有实例的内部逻辑;工厂类可以直接被外界直接调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法factoryMethod(),它返回一个抽象产品类Product,所有的具体产品都是抽象产品的子类。

                2.Product(抽象产品角色

                  抽象产品角色是简单工厂模式所创建的所有对象的父类,负责描述所有实例所共有的公共接口,它的引入将提高系统的灵活性,使得在工厂类中只需定义一个工厂方法,因为所有创建的具体产品对象都是其子类对象。

                3.ConcreteProduct(具体产品类)

                  具体产品角色是简单工厂模式的创建目标,所有创建的对象都充当这个角色的某个具体类的实例。每一个具体产品角色都继承了抽象产品角色,需要实现定义在抽象产品中的抽象方法 。

   

下面通过一个简单的例子实现简单工厂模式。

         题目:使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,请实现该场景。现需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。        

1.未增加Robot之前的类图

为了保证系统的扩展性并将各种人类型对象的创建封装在一个统一的方法中,引入一个person接口。

Person是一个接口,其中包含了所有人都具有的业务方法create()。

 1.1未增加Robot之前

Nvwa代码

package simple_factory_pattern;

public class Nvwa {
    public static Person getPerson(String person1) throws Exception
    {
        if (person1.equalsIgnoreCase("M")){
            return new Man();
        }
        else if (person1.equalsIgnoreCase("W")){
            return new Women();
        }else
        {
            throw new Exception("对不起,暂时无法创造该人。");
        }
    }
}

 Person接口

package simple_factory_pattern;

public interface Person {
    public void create();
}

Man类

package simple_factory_pattern;

public class Man implements Person{
    @Override
    public void create() {
        System.out.println("成功创造了男人...");
    }
}

Women类

package simple_factory_pattern;

public class Women implements Person{
    @Override
    public void create() {
        System.out.println("成功创建了女人...");
    }
}

测试未增加Robot之前的代码:

package simple_factory_pattern;

public class Test {
    public static void main(String[] args) throws Exception {
        Person person;
        String person1 = "W";
        person = Nvwa.getPerson(person1);
        person.create();
    }
}

输出结果正常:

2.增加Robot之后的类图

2.1增加一个新的Robot类之后整体代码

只是需要修改nvwa代码

package simple_factory_pattern;

public class Nvwa {
    public static Person getPerson(String person1) throws Exception
    {
        if (person1.equalsIgnoreCase("M")){
            return new Man();
        }
        else if (person1.equalsIgnoreCase("W")){
            return new Women();
        }else if (person1.equalsIgnoreCase("R")){
            return new Robot();
        }
        else
        {
            throw new Exception("对不起,暂时无法创造该人。");
        }
    }
}

以及新增一个Robbt类

package simple_factory_pattern;

public class Robot implements Person{
    @Override
    public void create() {
        System.out.println("成功创造了机器人...");
    }
}

测试输出Robot

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计模式——简单工厂模式 的相关文章

随机推荐

  • NGINX实现TCP加密代理

    NGINX实现TCP加密代理 NGINX实现TCP代理 源码安装NGINX 修改配置文件 重启NGINX 测试 实现转发MySql Redis 矿池ssl 以及各种TCP转发 NGINX实现TCP代理 源码安装NGINX NGINX官网源码
  • 数据挖掘(全书的知识点都包括了)

    数据挖掘 第一章 1 什么是数据挖掘 数据挖掘是从数据中 发现其有用的信息 从而帮助我们做出决策 广义角度 数据挖掘是从大量的 不完全的 有噪声的 模糊的 随机的实际应用数据中 提取隐含在其中的 人们事先不知道的 但又是潜在有用的信息和知识
  • Android图片加载内存优化

    Android图片加载内存优化 利用BitmapFactory Options实现图片内存优化 通过设置options inPreferredConfig控制内存占用 通过设置采样率options inSampleSize来减少图片内存占用
  • 使用R语言构建泊松回归模型

    使用R语言构建泊松回归模型 泊松回归是一种广泛应用于计数数据分析的回归模型 它是基于泊松分布的概率模型 用于描述事件在一定时间或空间范围内发生的次数 在本文中 我们将学习如何使用R语言构建泊松回归模型 并提供相应的源代码示例 1 数据准备
  • 详细前后端分离实现facebook第三方登录的全过程(国内一般都是用Android和ios,并且资料稀少)

    实现facebook第三方登录全过程 需求 官方文档与校验工具 详细步骤 1 注册一个facebook的账号 2 登录https developers facebook com 3 点击我的应用 4 创建一个属于自己的应用 5 选择类型和详
  • 免费使用中国知网/查看外文文献—浙江图书馆

    参考https www zhihu com question 20188973 answer 296971317 目录标题 注册 知网 外文文献 注册 支付宝搜索 浙江图书馆 关注并进入浙江图书馆生活号 点击 服务大厅 点击 新用户注册 设
  • 【HBZ分享】数仓里面的概念-宽表-维度表-事实表概念讲解

    数仓概念 1 度量值 可被统计的 比如 次数 销量 营销额 订单表中的下单金额等可以统计的值叫度量值 2 维度表 1 对事实描述的信息 每一张表都对应现实世界中的一个对象或概念 比如 用户 商品 日期 地区维度 2 比如要分析商品的销售情况
  • 2023Mid Journey第一部AI中英双语图文描述关键词辞典.pdf(附下载链接)

    省时查报告 专业 及时 全面的行研报告库 省时查方案 专业 及时 全面的营销策划方案库 免费下载 2023年8月份全网热门报告合集 ChatGPT提词示例 让你的ChatGPT聪明100倍 超百页干货资料 AI应用的难点 痛点与未来 202
  • Kali Linux 通过gnome-tweaks调整原生主题的字体字号

    首先我们需要确认是否安装了 gnome tweaks 因为默认kali Linux使用的是gnome桌面程序 大部分情况下是默认就有的 你只需要确认下是否安装 使用命令行确认 whereis gnome tweaks 出现下图所示就表示有
  • Sidetree - 去中心化身份管理协议

    身份 Identity 管理是区块链应用的核心元素 在一个不可信 匿名的分布计算生态中 要实现去中心化身份管理并不是一件容易的事情 Sidetree是一个基于现有区块链平台的第二层 L2s 协议 专门用于去中心化身份管理 微软最新开源的IO
  • 史上最全Android性能优化方案解析

    Android中的性能优分为以下几个方面 布局优化 网络优化 安装包优化 内存优化 卡顿优化 启动优化 一 布局优化 布局优化的本质就是减少View的层级 常见的布局优化方案如下 在LinearLayout和RelativeLayout都可
  • IP数据报的发送和转发过程

    IP数据报的发送和转发过程 源主机如何知道目的主机是否与自己在同一网络中 同一个网络中的主机可以直接通信 这属于直接交付 不同网络中的主机不能直接通信 需要路由器的中转 这属于间接交付 现假设主机C给主机F发送ip数据报 主机C将自己的IP
  • Spring Boot整合Spring Security并设置自定义登录页面

    准备工作 创建一个Spring Boot项目 注意选择Spring Boot的版本 选择3 0以下的版本 选择如下依赖 等待项目创建成功 项目创建成功之后 添加Mybatis plus的依赖
  • matlab中使用save保存文件, 文件名中有变量

    K 3 filenm K num2str K p num2str K mat save filenm
  • C#中 的泛型

    一 泛型类 1 定义一个泛型类 这个类中某些字段的类型是不确定的 这些类型可以在类构造的时候确定下来 类似于模板 class TestA
  • Ztree组件 支持全选 和反选不影响父级

    ztree ztree v3 3 5 46 main js import ztree ztree v3 js jquery ztree core js import ztree ztree v3 css zTreeStyle zTreeSt
  • Flutter开发之——动画-Lottie

    一 概述 Lottie是Aribnb开源的面向Android iOS等的高性能动画库 Flutter原生库不支持Lottie 但是可以通过第三方插件实现Lottie的动画效果 二 导入lottie flutter插件 2 1 插件地址 Lo
  • unity局域网开关机步骤二-c#-tcp

    using System using System Collections Generic using System Linq using System Text using System Net Sockets using System
  • Python基础知识(四):一文看懂列表、元组和字符串操作

    序列 序列是具有索引和切片能力的集合 列表 元组和字符串具有通过索引访问某个具体的值 或通过切片返回一段切片的能力 列表 元组 字符串都属于序列 1 列表 列表 List 是Python中非常重要的内置数据类型 列表由一系列元素组成 所有的
  • 设计模式——简单工厂模式

    简单工厂模式定义为 简单工厂模式又称为静态工厂方法模型 它属于类创建型模式 在简单工厂模式中 可以根据参数的不同返回不同类的实例 简单工厂专门定义一个类来负责创建其他类的实例 被创建的实例通常都具有共同的父类 简单工厂模式结构图 简单工厂模