JAVA设计模式-创建模式-多例模式
多例模式Multition
- 为什么要有设计模式?
- 什么是多例模式?
- 为什么要有多例模式?
- 多例模式的实现方式
- 鸣谢
为什么要有设计模式?
一个有价值的系统总是会因为需求的变化而变化,可能是原有需求的修改,也可能是新需求的增加。于是可怜的猿们就得修改原来的代码。好的架构和设计可以让我们的代码结构具有良好的扩展性,在满足需求变化的同时仅需要修改尽可能少的代码,可以将需求变化对原系统的影响降到很低。设计模式就是人们对于良性架构设计的经验总结。
什么是多例模式?
多例模式其实是单例模式的推广,一个类允许有限个实例,并且由这个类自己创建,管理和提供实例。
为什么要有多例模式?
还用我在单例模式里的例子,系统需要把配置放在配置文件,并且需要一个读取配置的工具类,但是这次是有多个配置文件,因为很多时候把整个系统的配置全部放在一个配置文件不合理,有些配置是全局模块都会用的,有的配置仅仅是局部一个或几个模块使用。所以每个配置文件应当有一个配置管理器的实例。
多例模式的实现方式
/*** 枚举发方式的多例配置管理器*/
public class ConfigManager {public enum ConfigType {DB_CONFIG("db.cfg"),CACHE_CONFIG("cache.cfg"),EMAIL_CONFIG("email.cfg"),;private final String configFileName;private final ConfigManager instance;ConfigType(String configFileName) {this.configFileName = configFileName;this.instance = new ConfigManager(configFileName);}}/*** 将配置读取到内存*/private final Properties configs;private ConfigManager(String configFileName) {System.out.println("实例化配置管理器:" + configFileName);configs = new Properties();try {configs.load(ConfigManager.class.getClassLoader().getResourceAsStream(configFileName));} catch (IOException e) {throw new RuntimeException(e.getMessage(), e);}}/*** 取得配置文件名* @return*/public static String getConfigFileName(ConfigType configType) {return configType.configFileName;}/*** 取得实例* @return*/public static ConfigManager getInstance(ConfigType configType) {return configType.instance;}/*** 取得配置* @param configKey* @return*/public String getConfigValue(String configKey) {return configs.getProperty(configKey);}
}
/*** 客户端*/
public class CacheClient {/*** 打印配置文件名*/public void printConfigFileName() {System.out.println("配置文件名:" + ConfigManager.getConfigFileName(ConfigManager.ConfigType.CACHE_CONFIG));}/*** 打印配置值* @param key*/public void printConfigValue(String key) {System.out.println(ConfigManager.getInstance(ConfigManager.ConfigType.CACHE_CONFIG).getConfigValue(key));}public static void main(String[] args) {CacheClient client = new CacheClient();client.printConfigFileName();client.printConfigValue("key1");}
}
这里我仅仅使用了枚举方式,其实其他单例的实现方式都可以扩展为多例。掌握好单例的思想,稍加扩展就可以变为多例模式了。
鸣谢
非常感谢你花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,欢迎指正。欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。
JAVA设计模式-创建模式-多例模式相关推荐
- java设计模式——创建型之建造者模式
自大学课程初识设计模式以来,就越发觉得有必要系统学习一下设计模式. 刚好在实习前准备期间课比较少,抽出一点时间整理一下记一些笔记,复制粘贴比较多. 笔记比较适合学习过设计模式的同学. Builder ...
- Java设计模式(1)工厂模式(Factory模式)
工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...
- Java设计模式(10)代理模式(Proxy模式)
理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...
- 【Java设计模式】简单学解释器模式——加减乘除
目录 说明 实现方式 应用场景 其他链接 说明 行为型模式之一,其他还有命令模式.模板方法模式.访问者模式.观察者模式.中介者模式.备忘录模式.迭代器模式.状态模式.策略模式.职责链模式(责任链模式) ...
- Java设计模式(8)组合模式(Composite模式)
Composite定义:将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Compo ...
- 【Java设计模式】简单学外观模式——万能遥控器
目录 说明 目标 实现方式 注意事项 其他链接 说明 结构型模式之一,其他还有适配器模式.桥接模式.组合模式.装饰模式.享元模式.代理模式 外观模式(Facade Pattern)通过定义一个一致的接 ...
- 【Java设计模式】简单学桥接模式——来杯大杯加奶不加糖咖啡
目录 说明 目标 实现方式 应用场景 其他链接 说明 结构型模式之一,其他还有适配器模式.装饰模式.组合模式.外观模式.享元模式.代理模式 目标 用抽象关联取代了多层继承,将类之间的静态继承关系转换为 ...
- 【Java设计模式】简单学访问者模式——我的选择是,Yes
目录 说明 实现方式 优点 缺点 应用场景 其他链接 说明 行为型模式之一,其他还有命令模式.模板方法模式.迭代器模式.观察者模式.中介者模式.备忘录模式.解释器模式(Interpreter模式).状 ...
- 设计模式(创建型)之建造者模式(Builder Pattern)
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...
- Java 设计模式之静态工厂方法模式
设计模式系列 创建型设计模式 Java 设计模式之单例模式 Java 设计模式之静态工厂方法模式 Java 设计模式之工厂方法模式 Java 设计模式之抽象工厂模式 Java 设计模式之Builder ...
最新文章
- Linux内核源码分析--内核启动之(2)Image内核启动(汇编部分)(Linux-3.0 ARMv7) 【转】...
- 使用transform和transition制作CSS3动画
- 2000服务器文件共享,Win2000 Server实现对共享文件的监控
- 强行更改linux服务器时间,加强Linux服务器安全的20项建议
- Apache Cordova介绍
- python的变量的命名规则以及定义
- Python基础-day01
- Web前端开发实用在线工具
- Drawable之color示例
- 至读博客朋友的一封信
- 今天开始用 VSU 2010
- Linux 入侵排查
- 软件测试自动化测试工具有哪些?常见的自动化工具简介
- 计数排序 | Counting Sort
- 『贪心』阿狸和桃子的游戏
- ROS文件系统和文件系统操作
- 子网掩码是什么,可以做什么
- 小程序运营打包 遇到找不到game.json
- 基于Java+Swing+Mysql员工信息管理系统
- http的长连接和短连接(史上最通俗!)
热门文章
- 【图】公路车 如何变速 公路车如何调整速度 法嘴怎么打气
- 如何将youtube转成mp3
- Word如何让两个文档同时并排查看
- ffmpeg转码生成的m3u8格式详解
- 为什么我们要努力的赚钱?
- 2014年高考计算机试题答案,2014高考计算机试卷.doc
- 外媒:《百年孤独》作者马尔克斯去世(图)
- 华为HCIA鲲鹏云学习Linux指令|CSDN创作打卡
- ArcBlock ⑨ 月报 | 树立技术传播三大支柱 夯实全球开发者社区基础
- 数据库原理与应用(SQL)——3、关系数据理论(函数依赖、闭包、函数依赖集的最小集、规范化---范式 )