8、工厂方法

2023-11-11

文章目录


概念

  • 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类;
  • 工厂模式使其创建过程延迟到子类进行;

demo

package com.cn.go.designpattern;

public class FactoryMethod {
    public static void main(String[] args) {
        MotorVehicleFactory motorVehicleFactory = new MotorVehicleFactory();
        Vehicle vehicle = motorVehicleFactory.create(Car.class);
        vehicle.move();

        NonMotorVehicleFactory nonMotorVehicleFactory = new NonMotorVehicleFactory();
        Vehicle bicycle = nonMotorVehicleFactory.create(Bicycle.class);
        bicycle.move();
    }
}

abstract class Vehicle{
   abstract void move();
}

class Car extends Vehicle{
    void move() {
        System.out.println("car move");
    }
}

class Bicycle extends Vehicle{

    void move() {
        System.out.println("bicycle move");
    }
}


/**
 * 这个类看似多余;没有这个类,直接创建对象的话就是 简单工厂
 */
abstract class VehicleFactory {
    abstract <T extends Vehicle> Vehicle create(Class<T> c);
}

class MotorVehicleFactory extends VehicleFactory{

    <T extends Vehicle> Vehicle create(Class<T> c) {
        T res =null ;
        try {
            res = (T) Class.forName(c.getName()).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return res;
    }
}



class NonMotorVehicleFactory extends VehicleFactory{

    <T extends Vehicle> Vehicle create(Class<T> c) {
        Vehicle vehicle = null;

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

8、工厂方法 的相关文章

  • LR安装遇到 Cannot save the license information because access to the registry is denied

    在安装LoadRunner11时 会出现多种问题 在此以我遇到的问题一一进行解决 1 在首先安装时导入注册文件会遇到一个错误 就是 此时你需要一个工具 deletelicense 清除注册表信息的一个工具 可以轻易下载到 然后把LoadeR
  • 深入理解C++中的move和forward!

    导语 在C 11标准之前 C 中默认的传值类型均为Copy语义 即 不论是指针类型还是值类型 都将会在进行函数调用时被完整的复制一份 对于非指针而言 开销及其巨大 因此在C 11以后 引入了右值和Move语义 极大地提高了效率 本文介绍了在
  • 保险智能理赔-医疗票据OCR识别解决方案

    基于对健康险理赔行业的深刻洞察和理解 以领先的医疗AI数智化能力打通健康险理赔全流程 通过RPA人机协作实现对理赔材料的智能录入和初审工作 释放大量的专业录单和审核人力 减少企业运营成本 面临痛点 1 人工录入成本高 涉及个人证件 保险单据
  • Visual Attention Network(VAN)

    Visual Attention Network阅读翻译笔记 原文 https arxiv org abs 2202 09741 代码 https github com Visual Attention Network 摘要 虽然最初是为自
  • oracle 排序后取中间的数据

    用minus取 3000和5000的差值 排序后取序列为3000 5000的数据 select from table name t where rownum lt 5000 order by t sn asc minus select fr
  • php event监听

  • linux挂马检测,检测网站挂马程序(Python)

    系统管理员通常从svn git中检索代码 部署站点后通常首先会生成该站点所有文件的MD5值 如果上线后网站页面内容被篡改 如挂马 等 可以比对之前生成MD5值快速查找去那些文件被更改 为了使系统管理员第一时间发现 可结合crontab或na
  • 树莓派的四种登陆方式

    参考 树莓派的4种登陆方式 作者 丶PURSUING 发布时间 2021 02 02 09 15 30 网址 https blog csdn net weixin 44742824 article details 113524929 spm
  • 大厂被裁5个月,boss招聘上12000次打招呼,终于拿到offer了

    你可能不相信 但这是一个小伙伴最近的真实经历 他是一个有着5年工作经验的滴滴非核心项目运营 曾经在一家知名的互联网公司工作 收入也不错 但就在今年年初 因为后疫情的影响 公司进行了一轮大规模的裁员 他就成了其中的一员 从那以后 他就开始了漫
  • Android OpenGLES2.0(十六)——3D模型贴图及光照处理(obj+mtl)

    在Android OpenGLES2 0 十四 Obj格式3D模型加载中实现了Obj格式的3D模型的加载 加载的是一个没有贴图 没有光照处理的帽子 为了呈现出立体效果 手动 加了光照 拥有贴图的纹理及光照又该怎么加载呢 模型文件 本篇博客例

随机推荐

  • 【JVM】JVM调优(基础篇)

    一 概述 先来说下JVM调优主要是在调啥 调优就是调节JVM运行时内存大小 gc垃圾回收细节 要想调整JVM运行时内存大小 需要我们知道JVM内存划分知识以及要想调整gc垃圾回收的细节 需要我们知道垃圾回收器工作原理以及它们使用的垃圾回收算
  • FlinkCDC第三部分-同步mysql到mysql,ctrl就完事~(flink版本1.16.2)

    本文介绍了 来源单表 gt 目标源单表同步 多来源单表 gt 目标源单表同步 注 1 16版本 1 17版本都可以使用火焰图 生产上最好关闭 详情见文章末尾 Flink版本 1 16 2 环境 Linux CentOS 7 0 jdk1 8
  • cocos2d-x 源码分析 总目录

    这篇博客用来整理与cocos2d x相关的工作 只要有新的分析 扩展或者修改 都会更改此文章 祝大家愉快 1 源码分析 1 CCScrollView源码分析 http blog csdn net u011225840 article det
  • Python破解12306图片验证码

    不知从何时起 12306的登录验证码竟然变成了按字找图 可以说是又提高了一个等次 竟然把图像识别都用上了 不过有些图片 不得不说有些变态 图片的清晰图就更别说了 明显是从网络上的图库中搬过来的 谁知没多久 网络就惊现破解12306图片验证码
  • 删除 GitHub 提交记录中的文件或敏感数据

    BFG Repo Cleaner 是一个简单 快速的 10 720 倍 工具 代替 git filter branch 在你的 Git 存储库中清除不想要的文件或敏感数据 GitHub 地址 https github com rtyley
  • 代码审计-strpos数组绕过

    ereg 函数用指定的模式搜索一个字符串中指定的字符串 如果匹配成功返回true 否则 则返回false 搜索字母的字符是大小写敏感的 strpos 函数查找字符串在另一字符串中第一次出现的位置
  • CloudOS:物联网开发平台,云上开发,边端交付

    文章目录 一 CloudOS概述 二 CloudOS主要功能 1 云上开发 2 边端交付 3 数据管理 4 安全保障 三 CloudOS应用场景 1 智能家居 2 智慧城市 3 工业物联网 四 总结 欢迎来到云计算技术应用专栏 CloudO
  • 工作中如何做好技术积累(摘自美团点评技术团队博客)

    引言 古人云 活到老 学到老 互联网算是最辛苦的行业之一 加班 对工程师来说已是 家常便饭 同时互联网技术又日新月异 很多工程师都疲于应付 叫苦不堪 以至于长期以来流传一个很广的误解 35岁是程序员工作的终点 如何在繁忙的工作中做好技术积累
  • 由于设备驱动程序的前一个实例仍在内存中,Windows 无法加载这个硬件的设备驱动

    感谢这位 sizzg7796 网友
  • 【Jenkins】部署vue项目(多种方式部署)

    文章目录 Jenkins部署vue项目 先安装node js 上传到linux并解压 配置Jenkins 环境变量 jenkins 创建任务 部署方式 第一种 npm run build 打包的形式 执行脚本 build Steps 第二种
  • Detr代码解读(一)数据加载

    文章目录 导读 数据加载 dataset train 数据源文件不存在报错解决 CocoDetection 采样 数据处理 处理 target 处理 img 收集策略 collate fn batch 导读 源码 Detr Detr用的数据
  • 深入理解React Hooks与闭包:提升你的React开发技能

    深入理解React Hooks与闭包 提升你的React开发技能 深入理解React Hooks与闭包 提升你的React开发技能 深入理解React Hooks与闭包 提升你的React开发技能 前言 1 React Hooks 简介 2
  • PID双环控制(速度环和位置环)

    PID双环的控制过程 PID双环控制的前期准备 代码实现步骤 效果图 位置环做为外环 速度环作为内环 可以看到外环的输出值作为内环的目标值 外环计算一次pid 我们根据pid公式可以知道 当离位置目标越来越近时 第一个误差 外环误差 就越来
  • python输出结果去掉引号_从二维数组python中删除引号

    我目前正在尝试执行对具有大指数的幂进行赋值的代码 而不对其进行计算 而是对其进行记录 我有一个包含1000行的file 每行包含两个由逗号分隔的iteger 我被困在试图从数组中删除引号的位置 我尝试了许多方法 但都无济于事 这是我的代码
  • 转---30 分钟学会 Flex 布局

    正文从这开始 Flex 基本概念 在 flex 容器中默认存在两条轴 水平主轴 main axis 和垂直的交叉轴 cross axis 这是默认的设置 当然你可以通过修改使垂直方向变为主轴 水平方向变为交叉轴 这个我们后面再说 在容器中的
  • 使用three.js加载obj+mtl模型

    已经有比较好的博客介绍如何加载模型 使用three js加载obj mtl模型完整案例 有一点小问题 会导致模型加载不成功 需要修改两处地方 1 将 Detector js 替换为 WebGL js 根据Three js中Detector
  • 自动登录远程服务器脚本,iTerm2使用脚本自动登录远程服务器

    在iTerm2下ssh不能自动登录 不自动登录每次输入命令太麻烦了 这里介绍一个采取expect脚本的方式实现iTerm2下ssh自动登录 新建一个expect脚本 login exp usr bin expect if llength a
  • 从无监督构建词库看「最小熵原理」,套路是如何炼成的

    作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP 神经网络 个人主页丨kexue fm 在深度学习等端到端方案已经逐步席卷 NLP 的今天 你是否还愿意去思考自然语言背后的基本原理 我们常说 文本挖掘 你真的感受到了 挖掘 的
  • Unity iOS打开AppStore评星页面,浅谈Application.OpenURL()方法。

    http fairwoodgame com blog p 38 Unity iOS打开AppStore评星页面 浅谈Application OpenURL 方法 Posted in Unity on August 6 2013Comment
  • 8、工厂方法

    文章目录 概念 demo 概念 定义一个创建对象的接口 让其子类自己决定实例化哪一个工厂类 工厂模式使其创建过程延迟到子类进行 demo package com cn go designpattern public class Factor