首页 > 编程知识 正文

车机导航提示发现工厂配置文件,控制反转为什么利于解耦合

时间:2023-05-04 17:51:32 阅读:11980 作者:3393

文章目录简介案例创建抽象类和子类创建配置文件创建工厂类创建测试类运行效果案例结构案例下载

前言

工厂博客对于简单的工厂模型,为了降低工厂和咖啡店之间的结合度,采取了Java多态性的思想实现。

本博客采用性能分析方式,实现解除耦合的操作。

案例建立电脑抽象类和电脑子类(华为电脑、小米电脑),采用配置文件bean.properties定义子类的全路径方式,用Java代码测试时使用反射加载它

创建抽象类和子类package factory.config; //电脑抽象类publicabstractclasscomputer {/* * *制作电脑* @ return */publicabstractshowcomputer (); (}/** *华为电脑生产(/publicclasshwcomputerextendscomputer (@ overridepublicstringshowcomputer ) ) { return '华为电脑); }}/** *小米电脑生产*/publicclassxmcomputerextendscomputer { @ overridepublicstringshowcomputer () { return '小米电脑); }创建配置文件,将bean.properties配置文件添加到类路径中,并在其中描述上述两个子类的完整路径映射关系。

HW computer=factory.config.hwcomputerxmcomputer=factory.config.XM computer主要分析、实例化和存储配置文件中的每个类

package factory.config; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.Set; 公共类计算机工厂{//提供创建指定电脑的方法publicstaticcomputercreatecomputer (字符串名称) returnmap.get ) name; //1,定义容器存储对象私有静态映射,并使用Computer map=new HashMap (; //2,向容器中添加数据static { //2.1,属性对象属性=new属性(; //2.2,调用properties的load方法加载指定文件的inputstreamresourceasstream=computer factory.class.getclass loader (.getclass loader //2.3,从properties集合中获取所有类名,对象setobjectkeys=properties.keyset (; for (object key : keys (string class name=properties.getproperty (string.value of ) key ); //用反射技术制作对象Class? class=class.forname(classname ); //重构(调用无参数结构)//对于具有其他参数的结构方法调用,是否需要根据具有参数的结构传递相应的数据值//Constructor? cons=aclass.getconstructor(…;//计算机实例=(计算机) cons.newinstance(…; 计算机实例=(计算机) aClass.newInstance ); //将对象和名称映射到容器中(string.value of (key ),instance ); }catch(exceptione ) { e.printStackTrace ); }}通过创建测试类的工厂类,传递指定的类名,获取具体的实现类。

package factory.config; 公共类测试(publicstaticvoidmain (string [ ] args ) computer computer=computer factory.create computer (' HW computer ) system.out.println (-------------- ) ); 计算机计算机2=计算机factory.create computer (' XM计算机' ); system.out.println (计算机2.show计算机(); }执行效果

外壳结构

案例下载gitee测试代码地址

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。