多例模式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设计模式-创建模式-多例模式相关推荐

  1. java设计模式——创建型之建造者模式

    自大学课程初识设计模式以来,就越发觉得有必要系统学习一下设计模式. 刚好在实习前准备期间课比较少,抽出一点时间整理一下记一些笔记,复制粘贴比较多. 笔记比较适合学习过设计模式的同学. Builder ...

  2. Java设计模式(1)工厂模式(Factory模式)

    工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...

  3. Java设计模式(10)代理模式(Proxy模式)

    理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...

  4. 【Java设计模式】简单学解释器模式——加减乘除

    目录 说明 实现方式 应用场景 其他链接 说明 行为型模式之一,其他还有命令模式.模板方法模式.访问者模式.观察者模式.中介者模式.备忘录模式.迭代器模式.状态模式.策略模式.职责链模式(责任链模式) ...

  5. Java设计模式(8)组合模式(Composite模式)

    Composite定义:将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Compo ...

  6. 【Java设计模式】简单学外观模式——万能遥控器

    目录 说明 目标 实现方式 注意事项 其他链接 说明 结构型模式之一,其他还有适配器模式.桥接模式.组合模式.装饰模式.享元模式.代理模式 外观模式(Facade Pattern)通过定义一个一致的接 ...

  7. 【Java设计模式】简单学桥接模式——来杯大杯加奶不加糖咖啡

    目录 说明 目标 实现方式 应用场景 其他链接 说明 结构型模式之一,其他还有适配器模式.装饰模式.组合模式.外观模式.享元模式.代理模式 目标 用抽象关联取代了多层继承,将类之间的静态继承关系转换为 ...

  8. 【Java设计模式】简单学访问者模式——我的选择是,Yes

    目录 说明 实现方式 优点 缺点 应用场景 其他链接 说明 行为型模式之一,其他还有命令模式.模板方法模式.迭代器模式.观察者模式.中介者模式.备忘录模式.解释器模式(Interpreter模式).状 ...

  9. 设计模式(创建型)之建造者模式(Builder Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  10. Java 设计模式之静态工厂方法模式

    设计模式系列 创建型设计模式 Java 设计模式之单例模式 Java 设计模式之静态工厂方法模式 Java 设计模式之工厂方法模式 Java 设计模式之抽象工厂模式 Java 设计模式之Builder ...

最新文章

  1. Linux内核源码分析--内核启动之(2)Image内核启动(汇编部分)(Linux-3.0 ARMv7) 【转】...
  2. 使用transform和transition制作CSS3动画
  3. 2000服务器文件共享,Win2000 Server实现对共享文件的监控
  4. 强行更改linux服务器时间,加强Linux服务器安全的20项建议
  5. Apache Cordova介绍
  6. python的变量的命名规则以及定义
  7. Python基础-day01
  8. Web前端开发实用在线工具
  9. Drawable之color示例
  10. 至读博客朋友的一封信
  11. 今天开始用 VSU 2010
  12. Linux 入侵排查
  13. 软件测试自动化测试工具有哪些?常见的自动化工具简介
  14. 计数排序 | Counting Sort
  15. 『贪心』阿狸和桃子的游戏
  16. ROS文件系统和文件系统操作
  17. 子网掩码是什么,可以做什么
  18. 小程序运营打包 遇到找不到game.json
  19. 基于Java+Swing+Mysql员工信息管理系统
  20. http的长连接和短连接(史上最通俗!)

热门文章

  1. 【图】公路车 如何变速 公路车如何调整速度 法嘴怎么打气
  2. 如何将youtube转成mp3
  3. Word如何让两个文档同时并排查看
  4. ffmpeg转码生成的m3u8格式详解
  5. 为什么我们要努力的赚钱?
  6. 2014年高考计算机试题答案,2014高考计算机试卷.doc
  7. 外媒:《百年孤独》作者马尔克斯去世(图)
  8. 华为HCIA鲲鹏云学习Linux指令|CSDN创作打卡
  9. ArcBlock ⑨ 月报 | 树立技术传播三大支柱 夯实全球开发者社区基础
  10. 数据库原理与应用(SQL)——3、关系数据理论(函数依赖、闭包、函数依赖集的最小集、规范化---范式 )