windows服務 MVC之@Html.Raw()用法 檔案流的讀寫 簡單工廠和原廠模式對比

來源:互聯網
上載者:User

標籤:south   注意事項   int   temp   sys   util   toe   完成   紅色   

 

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(推薦使用這種方式)

  Html.ActionLink的用法總結1、Html.ActionLink("linkText","actionName")第一個參數:要顯示的文本,第二個參數:視圖名例如:<%=Html.ActionLink("跳轉到About頁面", "About");%> → <a href="/Home/About">跳轉到About頁面</a> 2、Html.ActionLink("linkText","actionName","controlName")第一個參數:要顯示的文本,第二個參數:視圖名, 第三個參數:控制器名例如:<%= Html.ActionLink("跳轉到別的controler中", "Index", "Home");%> →<a href="/ Home/Index">跳轉到別的controler中</a> 3、Html.ActionLink("linkText","actionName",routeValues)第一個參數:要顯示的文本,第二個參數:視圖名, 第三個參數:url中的參數例如:<%=Html.ActionLink("跳轉到About頁面", "About", new { id = "1", name = "x" }) %> → <a href="/Home/About/1?name=x">跳轉到About頁面</a> 4、 Html.ActionLink("linkText","actionName",routeValues,htmlAttributes)第一個參數:要顯示的文本,第二個參數:視圖名, 第三個參數:url中的參數,第四個參數:設定標籤屬性例如:<%=Html.ActionLink("跳轉到About頁面", "About", new { id = "1", name = "x" }, new { disabled = "disabled",@class = "about"})%>  → <a class="about" disabled="disabled" href="/Home/About/1?name=x">跳轉到About頁面</a> 注意:設定標籤的class屬性時,應在class前加上@,因為class是關鍵字。   ---  檔案流的讀寫 

//讀檔案

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”,可以把這三個作為產品類,共同實現一個介面。

注意事項: 
作為一種建立類模式,在任何需要產生複雜物件的地方,都可以使用Factory 方法模式。有一點需要注意的地方就是複雜物件適合使用原廠模式,而簡單對象,特別是只需要通過 new 就可以完成建立的對象,無需使用原廠模式。如果使用原廠模式,就需要引入一個工廠類,會增加系統的複雜度。

三,簡單原廠模式

簡單原廠模式包含以下3個角色:

  1. Factory(工廠角色)
  2. Product(抽象產品角色)
  3. 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    {        //靜態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)方法,因此有時候被稱為靜態Factory 方法(Static Factory Method)模式

四,Factory 方法模式

使用Factory 方法模式改進後的按鈕工廠: 

使用Factory 方法模式改進後的按鈕工廠: 

Factory 方法模式:

  1. 不再提供一個按鈕工廠類來統一負責所有產品的建立,而是將具體按鈕的建立過程交給專門的工廠子類去完成。
  2. 如果出現新的按鈕類型,只需要為這種新類型的按鈕定義一個具體的工廠類就可以建立該新按鈕的執行個體。

Factory 方法模式的定義 
簡稱為原廠模式(Factory Pattern)。 
又可稱作虛擬構造器模式(Virtual Constructor Pattern)或多態原廠模式(Polymorphic Factory Pattern)。 
工廠父類負責定義建立產品對象的公用介面,而工廠子類則負責產生具體的產品對象。 
目的是將產品類的執行個體化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該執行個體化哪一個具體產品類。

Factory 方法模式包含以下4個角色:

  1. Product(抽象產品)
  2. ConcreteProduct(具體產品)
  3. Factory(抽象工廠)
  4. 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()用法 檔案流的讀寫 簡單工廠和原廠模式對比

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.