java 反射实现 工厂模式_java – 用反射实现工厂模式

我正在实施工厂模式这是我的工厂类:

class ProductFactory

{

private HashMap m_RegisteredProducts = new HashMap();

public void registerProduct (String productID, Class productClass)

{

m_RegisteredProducts.put(productID, productClass);

}

public Product createProduct(String productID)

{

Class productClass = (Class)m_RegisteredProducts.get(productID);

Constructor productConstructor = cClass.getDeclaredConstructor(new Class[] { String.class });

return (Product)productConstructor.newInstance(new Object[] { });

}

}

这是我的具体课程:

class OneProduct extends Product

{

static {

Factory.instance().registerProduct("ID1",OneProduct.class);

}

...

}

我的问题:

>如何强制执行所有具体实现来注册ID及其类对象? – 因为如果班级在工厂里没有这样注册,那么它就无法使用.

>我不能使用一个抽象类,它需要以某种方式将其所有子节点发送给父节点,强制执行此约束吗?像这样的东西:

public abstract class Product {

public Product(String name, Class productClass){

}

}

我在这里错过了什么吗?

最佳答案 在Java 8中你会写

class ProductFactory {

private final Map> m_RegisteredProducts =

new HashMap<>();

public ProductFactory registerProduct (String productID,

Function productFactory) {

m_RegisteredProducts.put(productID, productFactory);

return this;

}

public Product createProduct(String productID) {

return m_RegisteredProducts.get(productID).apply(productID);

}

}

注册

static {

Factory.instance().registerProduct("ID1", OneProduct::new)

.registerProduct("ID2", s -> new OneProduct("my" + s));

.registerProduct("ID3", s -> {

throw new AssertionError("Never create a " + s); });

}

OneProduct :: new与s – >非常相似;新的OneProduct(s)或

new Function() {

public Product apply(String s) {

return new OneProduct(s);

}

}

注意(1):Java 8将确保您具有可见的OneProduct(String)构造函数或无法编译.

注意(2):Java 7是公共支持终止.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《零基础》MySQL WHERE 子句(十三)

语法 以下是 SQL SELECT 语句使用 WHERE 子句从数据表中读取数据的通用语法&#xff1a; SELECT field1, field2,...fieldN FROM table_name1, table_name2... [WHERE condition1 [AND [OR]] condition2..... 查询语句中你可以使用一个或者多个表&#xff0c;表之间使用逗号…

《零基础》MySQL UPDATE 更新(十四)

语法 以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法&#xff1a; UPDATE table_name SET field1new-value1, field2new-value2 [WHERE Clause] 你可以同时更新一个或多个字段。你可以在 WHERE 子句中指定任何条件。你可以在一个单独表中同时更新数据。 当你需要更…

class h5 点击后样式变化_【php】JQuery怎么实现页面刷新后保留鼠标点击addclass的样式?...

刚开始是这个效果鼠标点击之后变成了这个效果要保证实现 a 标签点击链接一个新的网址同时也要保证效果达到我目前写的网站代码 可以下载http://115.com/file/c2zlhblv看看回答感谢所以回答问题的人。比较好的办法是使用url传参数&#xff0c;然后根据参数判断是否有必要显示cla…

《零基础》MySQL DELETE 语句(十五)

语法 以下是 SQL DELETE 语句从 MySQL 数据表中删除数据的通用语法&#xff1a; DELETE FROM table_name [WHERE Clause] 如果没有指定 WHERE 子句&#xff0c;MySQL 表中的所有记录将被删除。你可以在 WHERE 子句中指定任何条件您可以在单个表中一次性删除记录。 当你想删除…

java 获得站点地址_JavaWeb项目里面的路径获取方法总结

仅为资源搬运&#xff0c;个人还未充分理解...request.getRealPath不推荐使用request.getRealPath("") 这个方法已经不推荐使用了&#xff0c;那代替它的是什么方法 Deprecated. As of Version 2.1 of the Java Servlet API, use ServletContext.getRealPath(java.la…

《零基础》MySQL LIKE 子句(十六)

我们知道在 MySQL 中使用 SQL SELECT 命令来读取数据&#xff0c; 同时我们可以在 SELECT 语句中使用 WHERE 子句来获取指定的记录。 WHERE 子句中可以使用等号 来设定获取数据的条件&#xff0c;如 "runoob_author RUNOOB.COM"。 但是有时候我们需要获取 runoob…

《零基础》MySQL UNION 操作符(十七)

描述 MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。 语法 MySQL UNION 操作符语法格式&#xff1a; SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions] UNION [ALL …

《零基础》MySQL 排序(十八)

我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据。 如果我们需要对读取的数据进行排序&#xff0c;我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序&#xff0c;再返回搜索结果。 语法 以下是 SQL SELECT 语句使用 ORDER BY 子句将查询…

java序列化错在哪里_Spark序列化错误:java.io.NotSerializableException

由于spark算子用到的class没有实现序列化&#xff0c;报错如下所示15/11/23 14:43:47 ERROR Executor: Exception in task 0.0 in stage 4.0 (TID 4)java.io.NotSerializableException: EntityMentionSerialization stack:- object not serializable (class: EntityMention, va…

《零基础》MySQL GROUP BY 语句(十九)

GROUP BY 语句根据一个或多个列对结果集进行分组。 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。 GROUP BY 语法 SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name; 实例演示 本章节实例使用到了…

字谜 java_java - 2字的字谜 - 堆栈内存溢出

我正在练习java和一些算法&#xff0c;所以我想创建一个程序来查看2个单词是否是彼此的字谜。 我的方法是使用快速排序对单词进行排序&#xff0c;然后查看它们是否匹配。 我测试了我的quicksort功能&#xff0c;它似乎工作。 也许我的字谜功能错了&#xff1f; 我测试了我的代…

基于java jsp+mybatis+Spring+的SSM二手交易网站设计实现

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…

《零基础》MySQL 连接的使用(二十)

在前几章节中&#xff0c;我们已经学会了如何在一张表中读取数据&#xff0c;这是相对简单的&#xff0c;但是在真正的应用中经常需要从多个数据表中读取数据。 本章节我们将向大家介绍如何使用 MySQL 的 JOIN 在两个或多个表中查询数据。 你可以在 SELECT, UPDATE 和 DELETE…

怎么设置internet才能下载JAVA_如何使用Java从Internet下载和保存文件?

我需要获取一个在线文件(例如http://www.example.com/information.asp )并将其保存到目录中。 我知道有几种逐行捕获和读取在线文件(URL)的方法&#xff0c;但是有没有一种方法可以使用Java下载和保存文件&#xff1f;#1楼import java.io.*;import java.net.*;public class fil…

热榜!基于jsp+mysql的JSP在线水果销售商城系统设计实现【建议收藏】

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 文末获取源码联系方式 &#x1f4dd; 研究意…

java log4j权限被否定_SLF4J简介与使用(整合log4j)

一、概念SLF4J的全称是Simple Logging Facade for Java&#xff0c;即简单日志门面。SLF4J并不是具体的日志框架&#xff0c;而是作为一个简单门面服务于各类日志框架&#xff0c;如java.util.logging, logback和log4j。SLF4J提供了统一的记录日志的接口&#xff0c;对不同日志…

《springcloud超级入门》微服务的概念和优缺点《一》

微服务是什么&#xff1f;它的优缺点有哪些&#xff1f; “微服务”一词来源于 Martin Fowler 的《Microservices》一文。微服务是一种架构风格&#xff0c;即将单体应用划分为小型的服务单元&#xff0c;微服务之间使用 HTTP 的 API 进行资源访问与操作。 在笔者看来&#xf…

安卓 php环境 app,安卓系统lighttpd-php-mysql本地环境

这是一个可在安卓手机上布置的服务器环境&#xff0c;功能组件包括&#xff1a;lighttpd、php和mysql&#xff0c;能成功运行DZ等php程序&#xff0c;安装和配置过程十分简单&#xff0c;也许现在该是讨论用什么手机做服务器更合适的时候了。演示图片为一成功运行的服务器环境探…

硬核!从0到1学习Spring Cloud微服务章节《建议收藏》

为什么要使用学习springcloud以及他的优势&#xff1f; Spring Cloud 来源于 Spring&#xff0c;质量、稳定性、持续性都可以得到保证。 spirng Cloud 天然支持 Spring Boot&#xff0c;更加便于业务落地。 Spring Cloud 是 Java 领域最适合做微服务的框架。相比于其它框架&…

《springcloud超级入门》Spring Cloud是什么?Spring Cloud版本介绍《二》

Spring cloud是一系列框架的有序集合。它利用 Spring Boot 的开发便利性&#xff0c;巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务注册、服务发现、配置中心、消息总线、负载均衡、断路器、数据监控等&#xff0c;这些都可以用 Spring Boot 的开发风格做到一键启动…