<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 深入淺出外觀模式(二) 3. 外觀模式應用實例 下面通過一個應用實例來進一步學習和理解外觀模式。 1. 實例說明 某軟件公司欲開發一個可應用于多個軟件的文件加密模塊,該模塊可以對文件中的數據進行加密并將加密之后的數據存儲在一個新文件中,具體的流程包括三個部分,分別是讀取源文件、加密、保存加密之后的文件,其中,讀取文件和保存文件使用流來實現,加密操作通過求模運算實現。這三個操作相對獨立,為了實現代碼的獨立重用,讓設計更符合單一職責原則,這三個操作的業務代碼封裝在三個不同的類中。 現使用外觀模式設計該文件加密模塊。 2. 實例類圖 通過分析,本實例結構圖如圖4所示。 ![](http://img.my.csdn.net/uploads/201212/05/1354688525_6684.jpg) 圖4 文件加密模塊結構圖 在圖4中,EncryptFacade充當外觀類,FileReader、CipherMachine和FileWriter充當子系統類。 3. 實例代碼 (1) FileReader:文件讀取類,充當子系統類。 ``` //FileReader.cs using System; using System.Text; using System.IO; namespace FacadeSample { class FileReader { public string Read(string fileNameSrc) { Console.Write("讀取文件,獲取明文:"); FileStream fs = null; StringBuilder sb = new StringBuilder(); try { fs = new FileStream(fileNameSrc, FileMode.Open); int data; while((data = fs.ReadByte())!= -1) { sb = sb.Append((char)data); } fs.Close(); Console.WriteLine(sb.ToString()); } catch(FileNotFoundException e) { Console.WriteLine("文件不存在!"); } catch(IOException e) { Console.WriteLine("文件操作錯誤!"); } return sb.ToString(); } } } ``` (2) CipherMachine:數據加密類,充當子系統類。 ``` //CipherMachine.cs using System; using System.Text; namespace FacadeSample { class CipherMachine { public string Encrypt(string plainText) { Console.Write("數據加密,將明文轉換為密文:"); string es = ""; char[] chars = plainText.ToCharArray(); foreach(char ch in chars) { string c = (ch % 7).ToString(); es += c; } Console.WriteLine(es); return es; } } } ``` (3) FileWriter:文件保存類,充當子系統類。 ``` //FileWriter.cs using System; using System.IO; using System.Text; namespace FacadeSample { class FileWriter { public void Write(string encryptStr,string fileNameDes) { Console.WriteLine("保存密文,寫入文件。"); FileStream fs = null; try { fs = new FileStream(fileNameDes, FileMode.Create); byte[] str = Encoding.Default.GetBytes(encryptStr); fs.Write(str,0,str.Length); fs.Flush(); fs.Close(); } catch(FileNotFoundException e) { Console.WriteLine("文件不存在!"); } catch(IOException e) { Console.WriteLine(e.Message); Console.WriteLine("文件操作錯誤!"); } } } } ``` (4) EncryptFacade:加密外觀類,充當外觀類。 ``` // EncryptFacade.cs namespace FacadeSample { class EncryptFacade { //維持對其他對象的引用 private FileReader reader; private CipherMachine cipher; private FileWriter writer; public EncryptFacade() { reader = new FileReader(); cipher = new CipherMachine(); writer = new FileWriter(); } //調用其他對象的業務方法 public void FileEncrypt(string fileNameSrc, string fileNameDes) { string plainStr = reader.Read(fileNameSrc); string encryptStr = cipher.Encrypt(plainStr); writer.Write(encryptStr, fileNameDes); } } } ``` (5) Program:客戶端測試類 ``` //Program.cs using System; namespace FacadeSample { class Program { static void Main(string[] args) { EncryptFacade ef = new EncryptFacade(); ef.FileEncrypt("src.txt", "des.txt"); Console.Read(); } } } ``` 4. 結果及分析 編譯并運行程序,輸出結果如下: ``` 讀取文件,獲取明文:Hello world! 數據加密,將明文轉換為密文:233364062325 保存密文,寫入文件。 ``` 在本實例中,對文件src.txt中的數據進行加密,該文件內容為“Hello world!”,加密之后將密文保存到另一個文件des.txt中,程序運行后保存在文件中的密文為“233364062325”。在加密類CipherMachine中,采用求模運算對明文進行加密,將明文中的每一個字符除以一個整數(本例中為7,可以由用戶來進行設置)后取余數作為密文。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看