windows服务 MVC之@Html.Raw()用法 文件流的读写 简单工厂和工厂模式对比
windows服务
public partial class Service1 : ServiceBase
{
System.Threading.Timer recordTimer;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
IntialSaveRecord();
}
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
if (recordTimer != null)
{
recordTimer.Dispose();
}
}
/// <summary>
/// 定时检查,并执行方法
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
private void IntialSaveRecord()
{
//10000毫秒=10秒
TimerCallback timerCallback = new TimerCallback(CallbackTask); //加载事件
AutoResetEvent autoEvent = new AutoResetEvent(false);
recordTimer = new System.Threading.Timer(timerCallback, autoEvent, 0, 1800000);//其中参数10000表示延时执行服务的时间间隔,毫秒为单位
或者(定时服务)
System.Timers.Timer t = new System.Timers.Timer();//实例化Timer类,设置间隔时间为1000毫秒;
t.Elapsed += new System.Timers.ElapsedEventHandler(OrderTimer_Tick);//到时间的时候执行事件;
t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
t.Interval=1000;
t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;
}
//方法
private void CallbackTask(Object stateInfo)
{
WriteFile.SaveRecord(string.Format(@"dsc当前记录时间:{0},状况:程序运行正常!", DateTime.Now));
}
}
windows服务安装步骤:
1. cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
2. InstallUtil.exe exe的路径
卸载:
InstallUtil.exe /u exe的路径
MVC之@Html.Raw()用法
@Html.Raw() 方法输出带有html标签的字符串,
如:@Html.Raw("<div style='color:red'>输出字符串</div>")
结果:输出字符串 (红色字体的字符串)
使用Razor中的Html.Raw(推荐使用这种方式)
文件流的读写
//读文件
public static string ReadFile()
{
string basePath = System.AppDomain.CurrentDomain.BaseDirectory;
string strTempDir = string.Format("{0}", DateTime.Now.ToString("yyyyMMdd"));
string path3 = Path.Combine(basePath, strTempDir);
FileStream fs = new FileStream(path3, FileMode.Open);
StreamReader sr = new StreamReader(fs,Encoding.UTF8);
string line = sr.ReadLine();//直接读取一行
sr.Close();
fs.Close();
return line;
}
public static string ReadFile(string sUrl)
{
StringBuilder builder = new StringBuilder();
using (FileStream fs = File.Open(sUrl, FileMode.OpenOrCreate))
{
using (StreamReader sr = new StreamReader(fs, Encoding.UTF8))
{
builder.Append(sr.ReadToEnd());
}
}
return builder.ToString();
}
//写文件
public static void WriteFile()
{
string basePath = System.AppDomain.CurrentDomain.BaseDirectory;
string strTempDir = string.Format("{0}", DateTime.Now.ToString("yyyyMMdd"));
string path3 = Path.Combine(basePath, strTempDir);
FileStream fs = new FileStream(path3, FileMode.Append);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("hello world");
sw.Close();
fs.Close();//这里要注意fs一定要在sw后面关闭,否则会抛异常
}
简单工厂和工厂模式对比
一,工厂模式
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
二,介绍
意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
关键代码:创建过程在其子类执行。
应用实例:
1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。
2、Hibernate 换数据库只需换方言和驱动就可以。
优点:
1、一个调用者想创建一个对象,只要知道其名称就可以了。
2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
3、屏蔽产品的具体实现,调用者只关心产品的接口。
缺点:
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。
使用场景:
1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。
2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。
3、设计一个连接服务器的框架,需要三个协议,”POP3”、”IMAP”、”HTTP”,可以把这三个作为产品类,共同实现一个接口。
注意事项:
作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。
三,简单工厂模式
简单工厂模式包含以下3个角色:
- Factory(工厂角色)
- Product(抽象产品角色)
- ConcreteProduct(具体产品角色)
//典型的抽象产品类代码
abstract class Product
{
//所有产品类的公共业务方法
public void MethodSame()
{
//公共方法的实现
}
//声明抽象业务方法
public abstract void MethodDiff();
}
//典型的具体产品类代码
class ConcreteProductA : Product
{
//实现业务方法
public override void MethodDiff()
{
//业务方法的实现
}
}
class ConcreteProductB : Product
{
//实现业务方法
public override void MethodDiff()
{
//业务方法的实现
}
}
class Factory
{
//静态工厂方法
public Product GetProduct(string arg)
{
Product product = null;
if (arg.Equals("A"))
{
product = new ConcreteProductA();
//初始化设置product
}
else if (arg.Equals("B"))
{
product = new ConcreteProductB();
//初始化设置product
}
return product;
}
}
class Program
{
static void Main(string[] args)
{
Factory factory = new Factory();
Product product = factory.GetProduct("A");
product.MethodDiff();
}
}
在简单工厂模式中用于创建实例的方法有时候是静态(static)方法,因此有时候被称为静态工厂方法(Static Factory Method)模式
四,工厂方法模式
使用工厂方法模式改进后的按钮工厂:
使用工厂方法模式改进后的按钮工厂:
工厂方法模式:
- 不再提供一个按钮工厂类来统一负责所有产品的创建,而是将具体按钮的创建过程交给专门的工厂子类去完成。
- 如果出现新的按钮类型,只需要为这种新类型的按钮定义一个具体的工厂类就可以创建该新按钮的实例。
工厂方法模式的定义
简称为工厂模式(Factory Pattern)。
又可称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)。
工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象。
目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
工厂方法模式包含以下4个角色:
- Product(抽象产品)
- ConcreteProduct(具体产品)
- Factory(抽象工厂)
- ConcreteFactory(具体工厂)
//典型的抽象产品类代码
abstract class Product
{
//所有产品类的公共业务方法
public void MethodSame()
{
//公共方法的实现
}
//声明抽象业务方法
public abstract void MethodDiff();
}
//典型的具体产品类代码
class ConcreteProductA : Product
{
//实现业务方法
public override void MethodDiff()
{
//业务方法的实现
}
}
class ConcreteProductB : Product
{
//实现业务方法
public override void MethodDiff()
{
//业务方法的实现
}
}
//典型的抽象工厂类代码
interface Factory
{
Product FactoryMethod();
}
//典型的具体工厂类代码
class ConcreteAFactory : Factory
{
public Product FactoryMethod()
{
return new ConcreteProductA();
}
}
class ConcreteBFactory : Factory
{
public Product FactoryMethod()
{
return new ConcreteProductB();
}
}
class Program
{
static void Main(string[] args)
{
Factory factory = new ConcreteAFactory();
Product product = factory.FactoryMethod();
product.MethodDiff();
}
}
windows服务 MVC之@Html.Raw()用法 文件流的读写 简单工厂和工厂模式对比的更多相关文章
- Windows服务注册(需要指定config文件的情况下)
最近,遇到一个问题:需要将telegraf在Win平台下注册为windows服务(避免误操作关闭CMD窗口): 尝试了网上的几种注册Windows服务的方法,发现无法将telegraf这种需要在CMD ...
- C# 使用文件流来读写ini文件
背景 之前采用ini文件作为程序的配置文件,觉得这种结构简单明了,配置起来也挺方便.然后操作方式是通过WindowsAPI,然后再网上找到一个基于WindowsAPI封装的help类,用起来倒也顺手. ...
- C#文件流的读写
1.文件流写入的一般步骤 1.定义一个写文件流 2.定义一个要写入的字符串 3.完成字符串转byte数组 4.把字节数组写入指定路径的文件 5.关闭文件流 2.文件流读入的一般步骤 1.定义一个读文件 ...
- c#中文件流的读写
文件流读入:第一static void Main(string[] args) { //C#文件流写文件,默认追加FileMode.Append string msg = "okffffff ...
- node.js 从文件流中读写数据及管道流
读取数据 // 引入 fs 模块 const fs = require('fs'); // 创建可读流 let readStream = fs.createReadStream('index.txt' ...
- C# windows服务:如何获取服务程序所在的文件夹
AppDomain.CurrentDomain.BaseDirectory 就这么一句话
- 移动文件流的读写指针---fseek
函数原型:int fseek(FILE *stream,long offset,int origin) stream:文件指针, offset:偏移量,正数表示正向偏移,负数表示负向偏移.origin ...
- RDIFramework.NET框架SOA解(集Windows服务、WinForm形式和IIS发布形式)-分布式应用程序
RDIFramework.NET框架SOA解决方式(集Windows服务.WinForm形式与IIS形式公布)-分布式应用 RDIFramework.NET,基于.NET的高速信息化系统开发.整合框架 ...
- 玩转Windows服务系列——使用Boost.Application快速构建Windows服务
玩转Windows服务系列——创建Windows服务一文中,介绍了如何快速使用VS构建一个Windows服务.Debug.Release版本的注册和卸载,及其原理和服务运行.停止流程浅析分别介绍了Wi ...
随机推荐
- Untiy CurvedUI 的使用的bug修正
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/51996538 作者:car ...
- git2--常用命令
Git 命令详解及常用命令 Git作为常用的版本控制工具,多了解一些命令,将能省去很多时间,下面这张图是比较好的一张,贴出了看一下: 关于git,首先需要了解几个名词,如下: ? 1 2 3 4 Wo ...
- 第一阶段Sprint 对其他团队评价
咱们的team 针对对“小学生网页四则运算”这个产品的评审,本人提出建议:1.第一阶段的产品Sprint不够好,无任务看板.无燃尽图.希望完善该产品的的Sprint,第二阶段的Sprint要认真写好. ...
- BZOJ 2194 快速傅立叶之二 ——FFT
[题目分析] 咦,这不是卷积裸题. 敲敲敲,结果样例也没过. 看看看,卧槽i和k怎么反了. 艹艹艹,把B数组取个反. 靠靠靠,怎么全是零. 算算算,最终的取值范围算错了. 交交交,总算是A掉了. [代 ...
- noip2018——题解&总结
近期正在疯狂复习某些东西,这篇博客尽量年底更完……(Day2T2除外) 好了,所有的希望都破灭了,原来这就是出题人的素质.——一个被欺骗的可怜 $OIer$ 人生中倒数第三次 $noip$ (Mayb ...
- 16.1113 模拟考试T3
城堡[问题描述]给定一张N个点M条边的无向连通图,每条边有边权.我们需要从M条边中选出N − 1条, 构成一棵树. 记原图中从 1 号点到每个节点的最短路径长度为?Di ,树中从 1 号点到每个节点的 ...
- Android数据存储之Shared Preferences共享数据存储
Android数据存储之Shared Preferences共享数据存储 在Android中一共提供了4种数据存储方式,但是由于存储的这些数据都是其应用程序私有的,所以如果需要在其他应用程序中使用这些 ...
- csv文件导出
参考博客:http://www.cnblogs.com/mingforyou/p/4103132.html 导入jar包javacsv.jar 链接:http://pan.baidu.com/s/1i ...
- mysql date_add日期函数的使用
select date_add(CURRENT_DATE()-day(CURRENT_DATE())+1,interval 3 month);##my sql 获取三个月之后的第一天日期select ...
- Idea配置Tomcat以及maven
配置Tamcat Run-->Edit Configurations +-->如果列表里没有tomcat-->点击33 items more irrelevant继续寻找--> ...