封装:实现单例、多例模式,业务层继承调用
来源:互联网 发布:淘宝怎么开充值店 编辑:程序博客网 时间:2024/06/05 02:21
1、简介:采用继承的方法实现快速扩展单例、多例
2、目的:单例扩展方便、调用单例、多例方便
3、实现
using System;using System.Collections.Generic;using System.ComponentModel.Composition;using System.Linq;using System.Text;namespace HebianGu.ComLibModule.Factory{ /// <summary> 单例工厂父类</summary> public class BaseFactory<T> : IDisposableBF where T : class,new() { #region - Start 单例模式 - /// <summary> 单例模式 </summary> private static T t = null; /// <summary> 多线程锁 </summary> private static object localLock = new object(); /// <summary> 创建指定对象的单例实例 </summary> public static T Instance { get { if (t == null) { lock (localLock) { if (t == null) return t = new T(); } } return t; } } #endregion - 单例模式 End - #region - Start 多例模式 - /// <summary> 多例模式 </summary> static Dictionary<string, T> cache = null; /// <summary> 通过名称得到多例实例 </summary> public static T InstanceByName(string strKey) { lock (localLock) { if (cache == null) cache = new Dictionary<string, T>(); if (!cache.ContainsKey(strKey)) cache.Add(strKey, new T()); return cache[strKey]; } } #endregion - 多例模式 End - /// <summary> 外部不可以构造 </summary> protected BaseFactory() { } #region - 资源清理 - /// <summary> 供程序员显式调用的Dispose方法 </summary> public void Dispose() { // 调用带参数的Dispose方法,释放托管和非托管资源 Dispose(true); // 手动调用了Dispose释放资源,那么析构函数就是不必要的了,这里阻止GC调用析构函数 System.GC.SuppressFinalize(this); } protected void Dispose(bool disposing) { if (disposing) { ///TODO:在这里加入清理"托管资源"的代码,应该是xxx.Dispose(); t = null; } ///TODO:在这里加入清理"非托管资源"的代码 } /// <summary> 清理指定名称的缓存和单例 </summary> public void Dispose(string name) { Dispose(true); if (cache != null && cache.ContainsKey(name)) { cache.Remove(name); } } /// <summary> 清理指定名称的缓存和单例 </summary> public static void Dispose(Predicate<KeyValuePair<string, T>> macth) { foreach (KeyValuePair<string, T> v in cache) { if (macth(v)) { cache.Remove(v.Key); } } } /// <summary> 供GC调用的析构函数 </summary> ~BaseFactory() { // 释放非托管资源 Dispose(false); } #endregion } public interface IDisposableBF : IDisposable { void Dispose(string name); }}
4,、用例
using System;using System.Collections.Generic;using System.Linq;using System.Reflection;using System.Threading.Tasks;namespace HebianGu.ComLibModule.Factory{ static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { TestDemo.Instance.WriteLine("使用Instance单例调用"); TestDemo.InstanceByName("调用多例一").WriteLine(Environment.UserName); TestDemo.InstanceByName("调用多例二").WriteLine(Environment.UserName); } } class TestDemo : BaseFactory<TestDemo> { public void WriteLine(string str) { Console.WriteLine(MethodInfo.GetCurrentMethod().Name + " : " + str); } }}
0 0
- 封装:实现单例、多例模式,业务层继承调用
- 单例继承模式
- 黑马程序员——封装、继承、多态及单例模式
- 面面向对象(上) 封装,继承,对象初始化流程,单例设计模式向对象(上) 封装,继承,对象初始化流程,单例设计模式
- 抽象 多态 继承 封装 接口 单例
- 单例模式调用
- 单例模式实际业务理解
- JavaSE实战——面向对象(上) 封装,继承,对象初始化流程,单例设计模式
- Lua 实现单例 (userdata) 多继承单例
- lua面向对象实现-类实例化对象、继承、多态、多继承、lua单例模式
- lua面向对象实现-类实例化对象、继承、多态、多继承、lua单例模式
- lua面向对象实现-类实例化对象、继承、多态、多继承、lua单例模式
- lua面向对象实现-类实例化对象、继承、多态、多继承、lua单例模式
- 浅谈应用工厂模式和单例在Android中实现业务隔离
- 浅谈应用工厂模式和单例在Android中实现业务隔离
- 单例模式-单例模式调用普通类,普通类也可以实现单例模式
- 单例模式封装PDO链接数据库
- Okhttp的单例模式封装
- linux send与recv函数
- HTML
- 网络编程基础(2)-协议概要-TCP首部
- java虚拟机栈和本地方法栈溢出
- c++ 中用typedef定义新类型(类对象)小例子
- 封装:实现单例、多例模式,业务层继承调用
- Java 后台实现上传图片的接收并保存
- 获取文件尺寸清除缓存
- js去掉html标签和去掉字符串文本的所有的空格
- jedis命令综合(2)
- Debian及树莓派改时间
- 浅谈SQL SERVER中事务的ACID
- Android_adb_adb opendir failed ,permission denied的解决方法
- 264. Ugly Number II