您现在的位置是:首页 > 正文

6.工厂模式_2:实现改良版本

2024-04-01 00:09:52阅读 2

6.工厂模式_2:实现改良版本

学习:第7遍


1.工厂模式改良版本如何实现???


/**
 * 创建对象的工厂类
 * 
 * 根据类路径下的objs.properties属性文件中的配置来创建对象
 * 要求:
 * 1.文件中不能有空行
 * 2.注意编写顺序,由于对象间可能存在依赖关系,被依赖的对象必须放在依赖对象的前面
 */
public class ObjectFactory {

	/*
	 * 定义一个Map集合,用来存储对象
	 */
	private static Map<String, Object> objs = new HashMap<>();

	/*
	 * 类加载时读取属性文件,创建相应对象,对象是单例的
	 */
	static {
		try (BufferedReader reader = new BufferedReader(new InputStreamReader(
				ObjectFactory.class.getClassLoader().getResourceAsStream(
						"objs.properties")));) {
			String line = null;
			while ((line = reader.readLine()) != null) {
				String[] entry = line.split("=");
				objs.put(entry[0], Class.forName(entry[1]).newInstance());
			}
		} catch (Exception e) {
			throw new ExceptionInInitializerError("ObjectFactory初始化失败:" + e);
		}
	}

	/*
	 * 工厂方法,用来获取对象
	 */
	public static Object getObject(String key) {
		return objs.get(key);
	}

}

package designPattern;

public interface UserService {
	public void login();
}

package designPattern;

import java.util.Date;

public class UserServiceImpl implements UserService {

	// 依赖于Date对象
	Date date = (Date) ObjectFactory.getObject("date");

	@Override
	public void login() {
		System.out.println("UserServiceImpl.login()");

		System.out.println(date.getTime());
	}

}

package designPattern;

import java.util.Date;
import java.util.Random;

public class Test {
	public static void main(String[] args) {
		Date date = (Date) ObjectFactory.getObject("date");
	    System.out.println(date);
		
		Random random = (Random) ObjectFactory.getObject("random");
		System.out.println(random);
		
		 Date date2 = (Date) ObjectFactory.getObject("date");
		 System.out.println(date==date2);
		
		UserService userSerivce=(UserService) ObjectFactory.getObject("userService");
		userSerivce.login();
	}
}

src下的objs.properties文件

date=java.util.Date
random=java.util.Random
userService=designPattern.UserServiceImpl

网站文章

  • linux中通过dbca创建oracle数据库

    linux中通过dbca创建oracle数据库

    本文承接上篇博客,linux中安装oracle数据库1.首先还是一样的,本地的xstar连接上服务器,2.#非常重要,必须在oracle用户下执行这行命令,否则会导致你弹出的安装oracle界面全是框框export LANG=en_US.UTF-8#这边的ip要填你自己安装xstart自己电脑上面的ipexport DISPLAY=192.168.5.108:0.03...

    2024-04-01 00:09:40
  • L1-054 福到了 (15 分)

    “福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N×N 的网格组成的,网格中的元素或者为字符@或者为空格。而倒过来的汉字所用的...

    2024-04-01 00:09:34
  • C#基础(三十八)详细介绍委托、回调:一个类调用另一个类的方法

    一、简介 在基于Prism的MVVM架构中,用到了Socket通信作为Server。SocketClass类定义了单例模式,然后在软件启动的时候,就加载SocketClass并一直监听Client的消息。该消息包行了不同的标志,根据标志值加载不同类的方法。也就是加载View.xaml对应的ViewModel.cs。 那么问题来了,如何加载其他类(ViewModel...

    2024-04-01 00:09:07
  • (Python)文件读取时出现编码报错(一)——已解决

    (Python)文件读取时出现编码报错(一)——已解决

    (Python)文件读取时出现编码报错——已解决

    2024-04-01 00:09:01
  • 初学者之路——————随机粗糙面建模

    蒙特卡罗法又称线性滤波法,基本思想是在频域用功率谱进行滤波,再做逆快速傅立叶变换得到粗糙面的高低起伏。 粗糙面被认为由大量谐波叠加而成,谐波的振幅是独立的高斯随机变量,方差正比于特定波数的功率谱,所以可以用函数来表示一维粗糙面。 由于合成过程的表面长度有限,表面自相关函数不会衰减到0,所以会有振荡现象。因此,在反变换过程中需要进行加窗用来避免边缘效应和谱重叠问题。 如果文章存在问题,欢迎大家指出。

    2024-04-01 00:08:56
  • Zabbix异常-页面加载不出

    Zabbix异常-页面加载不出

    Zabbix异常-页面加载不出 由于机房搬迁,重启服务器之后,想要进入原来的zabbix监控页面,发现老是加载不出来。提示: 检查端口开启状态 正常 尝试获取zabbix页面信息 获取正常 估计还是端口未开放的问题 登录服务器,查看iptables规则 问题来了,所定义的防火墙规则不应该只有这么点,而且貌似也并没有开放80端口 开放80端口 问题很明显,防火...

    2024-04-01 00:08:48
  • scrapy可视化管理工具gerapy学习笔记

    安装和使用的方法见链接https://cuiqingcai.com/4959.html 值得注意的是需要的request版本比较高,如果本机有需要用到低版本的request,最好在虚拟机中安装 总结 一个管理爬虫项目的可视化工具,把项目部署到管理的操作全部变为交互式,相当的直观和方便。但是比起spiderkeeper相比缺少了定时爬虫功能,同时对于爬虫情况的可视化也不够完善。...

    2024-04-01 00:08:23
  • 基于SSM的学生宿舍管理系统|JavaWeb寝室管理系统(附源代码)

    基于SSM的学生宿舍管理系统|JavaWeb寝室管理系统(附源代码)

    JavaWeb宿舍管理系统设计与实现,寝室管理系统 本教程从系统架构模式、技术选型、使用人群分析、功能分析、数据库设计、运行环境搭建、功能演示等几个方面详细说明了基于SSM框架的宿舍(寝室)管理系统的设计与实现。适合作为计算机类毕业设计、课程设计、Java开发入门级项目。

    2024-04-01 00:08:17
  • Java优先队列(PriorityQueue)示例

    我们知道队列是遵循先进先出(First-In-First-Out)模式的,但有些时候需要在队列中基于优先级处理对象。举个例子,比方说我们有一个每日交易时段生成股票报告的应用程序,需要处理大量数据并且花...

    2024-04-01 00:08:09
  • Linux的动静态库

    Linux的动静态库

    前缀都是lib,后缀.a表示静态库,.so表示动态库,才是库的名字静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库动态库(.so):程序在运行的时候才去...

    2024-04-01 00:07:45