当前位置: 首页 > news >正文

设计模式-简单工厂模式(静态工厂模式)java实现

 介绍

简单工厂模式根据所提供的参数数据返回几个可能类中的一个类的实例。通常返回的类都有一个公共的父类和公共的方法。

 

意图

提供一个类,负责根据一定的条件创建某一具体类的实例。同时使用工厂模式也是为了隐藏创建对象的过程

角色及其职责

(1)工厂(Creator)角色:是简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。

(2) 抽象(Produet)角色:是简单工厂模式所创建的所有对象的父类,负责描述所有实例所共有的公共接口。

(3) 具体产品(Concrete Product)角色:是简单工厂模式的创建目标,所有创建的对象

都是充当这个角色的某个具体类的实例。一般来讲,它是抽象产品类的子类,实现了抽象产

品类中定义的所有接口方法。

 

 在工厂角色中可以通过参数来判断创建哪种具体的产品子类对象,这个参数可以通过配置文件获取,也可以作为方法参数传入。

例子

下面我来实现一下

一个产品接口,两个产品类Chair,Desk,一个工厂类,通过参数来决定创建哪个具体产品

产品接口

public interface MyProduct {//返回产品的具体名称String getProductName();
}

具体产品

public class Chair implements MyProduct{@Overridepublic String getProductName() {return "椅子";}
}
public class Desk implements MyProduct{@Overridepublic String getProductName() {return "桌子";}
}

工厂类

/*** @Classname MyProductFactory* @author: 我心* @Description: 产品工厂类* @Date 2022/11/26 21:51* @Created by Lenovo*/
public class MyProductFactory {public MyProduct getProduct(String code){MyProduct product=null;//要返回的产品对象//如果参数是c,则创建Chair对象if (code.equals("c")){product=new Chair();}//如果参数是d,则创建Desk对象else if( code.equals("d")){product=new Desk();}return product;}
}

运行代码

public class Main {public static void main(String[] args) {//这时候我们就不需要关注具体创建的是什么对象,只需要知道它是所需的产品即可,隐藏了创建对象的细节MyProductFactory productFactory=new MyProductFactory();//然后我们直接调用产品的公共接口方法使用即可,不管是什么产品,都实现了这一个接口,我们也不需要关注接口的细节MyProduct c = productFactory.getProduct("c");System.out.println(c.getProductName());}
}

运行结果

 

http://www.lryc.cn/news/115634.html

相关文章:

  • 如何共享笔记本电脑网络
  • Android 高级进阶知识整理
  • 一文详解 DolphinDB SQL 标准化
  • ATF(TF-A)安全通告汇总
  • vuejs 设计与实现 - 简单diff算法
  • 【前端|Javascript第3篇】探秘JavaScript的作用域与作用域链:小白也能轻松搞懂!
  • 【Spring AOP】结合日志面向切面编程 两种写法
  • C#在自动化领域的应用前景与潜力
  • string模拟实现:
  • 系统与软件安全研究(八)
  • jmeter测试rpc接口-使用dubbo框架调用【杭州多测师_王sir】
  • Java8中forEach()里使用return的效果
  • MVC配置原理
  • rabbitmq安装
  • 轻松抓取网页内容!API助力开发者,快速数据采集
  • CSDN 直播:腾讯云大数据 ES 结合 AI 大模型与向量检索的新一代云端检索分析引擎 8月-8号 19:00-20:30
  • 区块链智能合约代码示例
  • Spring Boot介绍--快速入门--约定优于配置
  • Scons编译lib库
  • React源码解析18(1)------ React.createElement 和 jsx
  • 系列3-常见的高可用MySQL解决方案
  • C#登录后携带cookie爬取数据
  • 自动驾驶国家新一代人工智能开放创新平台产业化应用
  • Maven分模块-继承-聚合-私服的高级用法
  • Spring 是如何解决循环依赖问题的?
  • Spring-2-深入理解Spring 注解依赖注入(DI):简化Java应用程序开发
  • java 强密码验证策略工具类
  • CI/CD—K8S 基本理解与部署
  • 2023网络安全常用工具汇总(附学习资料+工具安装包)
  • OpenStack监控工具