2012年4月18日  天气阴   天气灰蒙蒙的,对于我们这种要为毕业做准备的人来说,这天气舒服,凉爽   中午睡了一个时后  打开电脑  突然感觉  眼睛不适应电脑屏幕的亮度,就是最近眼睛看电脑太久了   不工作 了   呵呵   看来该休息一下喽      好久没更新文章了    更新一个吧

单例模式

using System;

using System.Collections.Generic;
using System.Text;
using System.IO;

namespace 单例模式
{
    //单例模式介绍
    //一个类在一个程序中只有一个对象
    //类似于程序的配置文件,一个程序中只能有一个配置文件,多个的话,程序 不知道在哪个文件去调
    //应用   文件缓存管理器
    class Program
    {
        static void Main(string[] args)
        {
            //Earth ea=new Earth();//不能创建对象
            /*Earth ea1=Earth.getEarth();
            Earth ea2=Earth.getEarth();
            Console.WriteLine(object.ReferenceEquals(ea1,ea2));//看是否是同一个对象   return true;
            */

//应用  文件缓存器
            FileCacheManager fc = FileCacheManager.instanse;//因为instanse是filecachemanager唯一的对象 ,所以其他类都只存这个对象的值
            string s=fc.ReadFile(@"c:\1.txt");
            Console.WriteLine(s);
            System.Threading.Thread.Sleep(8000);//为看到效果  在睡的8秒中  把文本文件   修改一下  看能否得到正确结果
            s = fc.ReadFile(@"c:\1.txt");
            Console.WriteLine(s);
            Console.ReadKey();
        }
    }
    class Earth
    {
        //static的赋值语句运行一次(在类的第一次加载的时候)
        private static Earth instanse = new Earth();//2、声明一个静态字段,初始化一个实例(提供对象的唯一实例)
        private Earth()//1、把构造函数private(防止外部调用构造函数创建对象)
        {
        }
        public static Earth getEarth()//3、编写一个静态方法或者静态属性,返回那个唯一的实例
        {
            return instanse;
        }
        public int population { get; set; }
    }

sealed class FileCacheManager//新建一个文件缓存管理器类  防止继承   用sealed关键字
    {
        public static readonly FileCacheManager instanse = new FileCacheManager();//设置一个只读的变量  存储该对象  
        Dictionary<string, CacheItem> dic = new Dictionary<string, CacheItem>();//创建字典
        private FileCacheManager()
        {
        }
        public string ReadFile(string filename)
        {
            if (dic.ContainsKey(filename))//判断文件 是否已读
            {
                DateTime lasttime = File.GetLastWriteTime(filename);
                if (lasttime == dic[filename].lastwriteTime)//判断文件 是否修改   根据最后修改时间
                {
                    return dic[filename].content;
                }
                else
                    return readtext(filename);
            }
            else
            {
                return readtext(filename);
            }
        }
        private string readtext(string filename)//读取文件  放到字典中
        {
            string txt = File.ReadAllText(filename);
            CacheItem ch = new CacheItem();
            ch.content = txt;
            ch.lastwriteTime = File.GetLastWriteTime(filename);//因为文件有可能被修改  为了获取的数据保持同步 所以保存他的最后修改时间  再去判断一下
            dic[filename] = ch;//写入字典
            return txt;
        }
    }
    class CacheItem//用于保存缓存项
    {
        public string content;
        public DateTime lastwriteTime;
    }

}

转载于:https://www.cnblogs.com/arno-zhang/archive/2012/04/18/5027557.html

单例模式之文件缓存器相关推荐

  1. java 文件 缓存_JAVA缓存技术

    转载地址:http://blog.csdn.net/madun/article/details/8569860 最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下 ...

  2. SDWebImage实现原理(怎么实现图片缓存器)

    入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始处 ...

  3. [翻译]运用文件解析器在任意文件中使用虚拟应用路径(~)

    原文出处:http://www.codeproject.com    Using the FileResolver to allow virtual application paths ( ~ ) i ...

  4. php加速缓存器opcache,apc,xcache,eAccelerator

    一.opcache opcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销. PHP 5.5. ...

  5. 系统垃圾文件清理器 制作:China Doll (莫增成)

    @echo off ::修正于2018-10-06 color 4a Title 系统垃圾文件清理器 制作:China Doll (莫增成) echo. echo ================== ...

  6. Reg Organizer(注册表文件清理器) v8.30.2中文绿色便携版

    点击下载来源:Reg Organizer(注册表文件清理器) v8.30.2中文绿色便携版 Reg Organizer是一款高品质的注册表文件清理器工具,通过简单的清理和整理窗口注册表项以及卸载程序来 ...

  7. bridge cc2021|adobe bridge cc 2021中文直装版(文件资源管理器) v11.0.0.83

    adobe bridge cc 2021是adobe公司最新发布的一款功能强大的文件资源管理器,由于该软件可以很好的帮助用户管理电脑文件,因此受到了极大的欢迎,使用它可以帮助用户让电脑里面的文件排列井 ...

  8. C语言里的out函数,c语言 vc 用waveout函数写wave文件播放器

    用WaveOut函数写wave文件播放器 要炒菜的话,就得先准备工具,如锅.铲子.炉灶等.对程序来说,就是各种函数的应用.WaveOut函数在windowsAPI中属于低阶接口,用来播放的话需要用到下 ...

  9. squid反向代理作为web前端内容缓存器及局域网内客户机通过代理服务器上网

    反向代理服务器有两种传输模式: 1.同步模式:(如:squid)用户发起请求,请求立即被转到后端的服务器,于是在浏览器和后端服务器之间就建立了一个连接,在请求完成前这个连接是一直存在的. 2.异步模式 ...

最新文章

  1. Ubuntu 16.04.1 LTS上安装电源管理系统TLP
  2. docker获取镜像很慢解决办法
  3. 损失函数中正则化项L1和L2的理解
  4. FreeBSD下安装配置Hadoop集群(性能调优)
  5. git 每次都要输入用户名密码_Git向GitHub提供代码
  6. dreamcast游戏_《Dreamcast Collection》开箱及游戏介绍
  7. 【论文串烧】基于特定实体的文本情感分类总结(PART I)
  8. .h和.cpp文件的区别 .
  9. android模拟器 bridge,ADB (Android Debug Bridge)简介
  10. c语言第四章选择结构作业,《c语言程序设计教程》林芳易云飞》第四章选择结构例题,习题详解...
  11. linux(Centos7系统)中安装JDK、Tomcat、Mysql
  12. python实现ddos防护_python实现的防DDoS脚本
  13. ADP论文关键要点总结
  14. split,splice,slice 三者的用法
  15. Opencv-Python-导向滤波快速导向滤波
  16. 微信小程序开发和APP开发有哪些区别
  17. 如何快速创建 Rproject 文件?
  18. 杂学——硬件:MIPI,压/速/频信号、并行转串行,SDI,PPM,单片机及开发板,交流直流,电容电阻,总线,RS485
  19. FM非相干解调原理及Keil代码
  20. PrimoBurnerSDK蓝光刻录工具开发工具包

热门文章

  1. 数据结构-循环单链表之约瑟夫问题
  2. hive简介以及安装配置
  3. video thumbnails
  4. 商业银行为什么大量组织高净值小规模活动?
  5. STC单片机程序下载失败总结
  6. ARM和NEON指令 very gooooooood.............
  7. python 发送邮件不显示附件_python3发送邮件(无附件)
  8. python测试用例管理_Python测试框架Pytest的常用插件测试报告
  9. 怎么画单极交流放大电路波形图_珠海放大IC怎么样
  10. 计算机二级mysql是什么_计算机二级mysql考什么内容?