1: public abstract class CompressAlg
2: {3: public abstract void Compress();
4: public abstract void Uncompress();
5: ~CompressAlg() 6: {7: MessageBox.Show("Object release", "~FileProcessor()");
8: } 9: }
Zip
1: public class Zip : CompressAlg
2: {3: public override void Compress()
4: {5: MessageBox.Show("Zip實作Compress");
6: }7: public override void Uncompress()
8: {9: MessageBox.Show("Zip實作Uncompress");
10: } 11: }Rar
1: public class Rar : CompressAlg
2: {3: public override void Compress()
4: {5: MessageBox.Show("Rar實作Compress");
6: }7: public override void Uncompress()
8: {9: MessageBox.Show("Rar實作Uncompress");
10: } 11: }Factory pattern部分
輸入: 壓縮方法字串
輸出: 傳回不同壓縮方法之物件
相較於strategy pattern, 則沒有一個像factory pattern集中管理各演算法(CompressFactory),
以zip和rar為例說明 strategy pattern 強調各種相似的演算法就是一個獨立的物件
1: public static class CompressFactory
2: {3: public static CompressAlg getInstance(string method)
4: {5: switch (method)
6: {7: case "zip":
8: return new Zip();
9: case "rar":
10: return new Rar();
11: default:
12: return new Rar();
13: } 14: } 15: }
Zip按鈕
1: var cmp = CompressFactory.getInstance("zip");
2: cmp.Compress(); 3: cmp.Uncompress();Rar按鈕
1: var cmp = CompressFactory.getInstance("rar");
2: cmp.Compress(); 3: cmp.Uncompress();Zip/Rar 動態切換按鈕
1: string method = comboBox1.Text;
2: var cmp = CompressFactory.getInstance(method); 3: cmp.Compress(); 4: cmp.Uncompress();全站熱搜


留言列表
