博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【自学】大话设计模式控制台
阅读量:5056 次
发布时间:2019-06-12

本文共 50781 字,大约阅读时间需要 169 分钟。

1 using System;   2 using System.CodeDom;   3 using System.Collections;   4 using System.Collections.Generic;   5 using System.Data.SqlClient;   6 using System.Linq;   7 using System.Runtime.Remoting;   8 using System.Runtime.Remoting.Contexts;   9 using System.Security.Policy;  10 using System.Text;  11 using System.Threading.Tasks;  12   13 namespace dhsjmsStudy  14 {  15     #region 简单工厂模式  16     public class operation  17     {  18         public decimal numberA { get; set; }  19         public decimal numberB { get; set; }  20   21         public virtual decimal GetResult()  22         {  23             return 0;  24         }  25     }  26   27   28     public class Add : operation  29     {  30         public override decimal GetResult()  31         {  32             return numberA + numberB;  33         }  34     }  35   36     public class Sub : operation  37     {  38         public override decimal GetResult()  39         {  40             return numberA - numberB;  41         }  42     }  43   44     public class Mlu : operation  45     {  46         public override decimal GetResult()  47         {  48             return numberA / numberB;  49         }  50     }  51   52     public class Div : operation  53     {  54         public override decimal GetResult()  55         {  56             return numberA * numberB;  57         }  58     }  59     #endregion  60   61     #region 策略模式  62     ///   63     /// 抽象收银类  64     ///   65     public abstract class CashSuper  66     {  67         public abstract double acceptCash(double money);  68     }  69     ///   70     /// 原价  71     ///   72     public class CashNormal : CashSuper  73     {  74         public override double acceptCash(double money)  75         {  76             return money;  77         }  78     }  79   80     ///   81     /// 打折  82     ///   83     public class CashRebate : CashSuper  84     {  85         private double moneyRebate = 1d;  86   87         public CashRebate(string moneyRebate)  88         {  89             this.moneyRebate = double.Parse(moneyRebate);  90         }  91   92         public override double acceptCash(double money)  93         {  94             return money * moneyRebate;  95         }  96     }  97   98     ///   99     /// 返利 100     ///  101     public class CashReturn : CashSuper 102     { 103         private double moneyCondition = 0; 104         private double moneyReturn = 0; 105  106         public CashReturn(string moneyCondition, string moneyReturn) 107         { 108             this.moneyCondition = double.Parse(moneyCondition); 109             this.moneyReturn = double.Parse(moneyReturn); 110         } 111  112         public override double acceptCash(double money) 113         { 114             return money >= moneyCondition ? (money - Math.Floor(money / moneyCondition) * moneyReturn) : money; 115         } 116     } 117  118  119     ///  120     /// 策略模式(策略封装了变化) 121     ///  122     public class CashContext 123     { 124         private CashSuper cs; 125         public CashContext(CashSuper csuper) 126         { 127             cs = csuper; 128         } 129  130         public CashContext(string type) 131         { 132             switch (type) 133             { 134                 case "正常消费": 135                     cs = new CashNormal(); 136                     break; 137                 case "满300返100": 138                     cs = new CashReturn("300", "100"); 139                     break; 140                 case "打八折": 141                     cs = new CashRebate("0.8"); 142                     break; 143             } 144         } 145  146         public double GetResult(double money) 147         { 148             return cs.acceptCash(money); 149         } 150     } 151  152     #endregion 153  154     #region 装饰模式 155  156     public class Person 157     { 158         public string name { get; set; } 159  160         public Person() 161         { 162  163         } 164  165         public Person(string name) 166         { 167             this.name = name; 168         } 169  170         public virtual void Show() 171         { 172             Console.WriteLine("装扮的{0}", name); 173         } 174     } 175  176     ///  177     /// 服饰抽象类 178     ///  179     internal class Finery : Person 180     { 181         protected Person component; 182  183  184         public override void Show() 185         { 186             if (component != null) 187                 component.Show(); 188         } 189  190         public void Decorate(Person component) 191         { 192             this.component = component; 193         } 194  195     } 196  197     internal class Tshirts : Finery 198     { 199         public override void Show() 200         { 201             Console.WriteLine("大T桖"); 202             base.Show(); 203         } 204     } 205  206     internal class BigTrouser : Finery 207     { 208         public override void Show() 209         { 210             Console.WriteLine("垮裤"); 211             base.Show(); 212         } 213     } 214     //其余... 215     #endregion 216  217     #region 代理模式 218  219     interface I代理 220     { 221         void SH(); 222         void WatchTv(); 223     } 224  225     public class ZQ : I代理 226     { 227         private BZQ person; 228  229         public ZQ(BZQ person) 230         { 231             this.person = person; 232         } 233  234         public void SH() 235         { 236             Console.WriteLine(person.Name + "送花"); 237         } 238  239         public void WatchTv() 240         { 241             Console.WriteLine(person.Name + "看电视"); 242         } 243     } 244  245     public class 代理人 : I代理 246     { 247         private ZQ gg; 248  249         public 代理人(BZQ mm) 250         { 251             gg = new ZQ(mm); 252         } 253  254         public void SH() 255         { 256             gg.SH(); 257         } 258  259         public void WatchTv() 260         { 261             gg.WatchTv(); 262         } 263     } 264  265  266     public class BZQ 267     { 268         public string Name { get; set; } 269     } 270  271     #endregion 272  273     #region 工厂方法模式 274  275     internal interface I工厂 276     { 277         operation CreateOperation(); 278     } 279  280     class AddFactory : I工厂 281     { 282         public operation CreateOperation() 283         { 284             return new Add(); 285         } 286     } 287  288     class SubFactory : I工厂 289     { 290         public operation CreateOperation() 291         { 292             return new Sub(); 293         } 294     } 295  296     class MulFactory : I工厂 297     { 298         public operation CreateOperation() 299         { 300             return new Mlu(); 301         } 302     } 303  304     class DivFactory : I工厂 305     { 306         public operation CreateOperation() 307         { 308             return new Div(); 309         } 310     } 311  312     ///  313     /// 雷锋 314     ///  315  316     internal class LeiFeng 317     { 318         public void Sweep() 319         { 320             Console.WriteLine("扫地"); 321         } 322  323         public void Wash() 324         { 325             Console.WriteLine("洗衣"); 326         } 327  328         public void BuyRice() 329         { 330             Console.WriteLine("买米"); 331         } 332     } 333  334     //学雷锋 335     internal class StudyPerson : LeiFeng 336     { 337  338     } 339  340     class Volunteer : LeiFeng 341     { 342  343     } 344     //简单雷锋工厂 345     internal class SimpleFactory 346     { 347         public static LeiFeng CreateLeiFeng(string type) 348         { 349             LeiFeng leiFeng = null; 350             switch (type) 351             { 352                 case "大学生": 353                     leiFeng = new StudyPerson(); 354                     break; 355                 case "社区志愿者": 356                     leiFeng = new Volunteer(); 357                     break; 358             } 359             return leiFeng; 360         } 361     } 362  363     interface IFactory 364     { 365         LeiFeng CreateLeiFeng(); 366     } 367  368     ///  369     /// 学雷锋的大学生工厂 370     ///  371     internal class UndergraduateFactory : IFactory 372     { 373         public LeiFeng CreateLeiFeng() 374         { 375             return new StudyPerson(); 376         } 377     } 378  379     internal class VolunteerFactory : IFactory 380     { 381         public LeiFeng CreateLeiFeng() 382         { 383             return new Volunteer(); 384         } 385     } 386  387     #endregion 388  389     #region 原型模式 390     ///  391     /// 原型类 392     ///  393     internal abstract class Prototype 394     { 395         private string id; 396         public string Id 397         { 398             get { return id; } 399         } 400  401         public Prototype(string id) 402         { 403             this.id = id; 404         } 405  406         public abstract Prototype Clone(); 407     } 408  409     ///  410     /// 具体原型类 411     ///  412     internal class ConcretePrototype : Prototype 413     { 414         public ConcretePrototype(string id) 415             : base(id) 416         { 417  418         } 419  420         public override Prototype Clone() 421         { 422             return (Prototype)this.MemberwiseClone(); 423         } 424     } 425  426     ///  427     /// 工作经历类 428     ///  429     internal class WorkExperience : ICloneable 430     { 431         public string wordDate { get; set; } 432  433         public string Company { get; set; } 434  435         public Object Clone() 436         { 437             return (Object)this.MemberwiseClone(); 438         } 439     } 440     ///  441     /// 简历类 442     ///  443     internal class Resume : ICloneable 444     { 445         private string name; 446         private string sex; 447         private string age; 448         //工作经历对象 449         private WorkExperience work; 450  451         public Resume(string name) 452         { 453             this.name = name; 454             work = new WorkExperience(); 455         } 456  457         private Resume(WorkExperience work) 458         { 459             this.work = (WorkExperience)work.Clone(); 460         } 461  462         //设置个人信息 463         public void SetPersonalInfo(string sex, string age) 464         { 465             this.sex = sex; 466             this.age = age; 467         } 468  469         //设置工作经历 470         public void SetWorkExperience(string wordDate, string company) 471         { 472             work.wordDate = wordDate; 473             work.Company = company; 474         } 475  476         //显示 477         public void Display() 478         { 479             Console.WriteLine("{0},{1},{2}", name, sex, age); 480             Console.WriteLine("工作经历:{0},{1}", work.wordDate, work.Company); 481         } 482  483         public Object Clone() 484         { 485             Resume obj = new Resume(this.work); 486             obj.name = this.name; 487             obj.sex = this.sex; 488             obj.age = this.age; 489             return obj; 490         } 491     } 492  493     #endregion 494  495     #region 模板方法模式 496  497     internal class TestPaper 498     { 499         public void TestQuestion1() 500         { 501             Console.WriteLine("第一题:a b c d "); 502             Console.WriteLine(Answer1()); 503         } 504  505         public void TestQuestion2() 506         { 507             Console.WriteLine("第二题:a b c d "); 508             Console.WriteLine(Answer2()); 509         } 510  511         public void TestQuestion3() 512         { 513             Console.WriteLine("第三题:a b c d "); 514             Console.WriteLine(Answer3()); 515         } 516  517         protected virtual string Answer1() 518         { 519             return ""; 520         } 521         protected virtual string Answer2() 522         { 523             return ""; 524         } 525         protected virtual string Answer3() 526         { 527             return ""; 528         } 529     } 530  531     internal class TestPaperA : TestPaper 532     { 533         protected override string Answer1() 534         { 535             return "a"; 536         } 537         protected override string Answer2() 538         { 539             return "b"; 540         } 541         protected override string Answer3() 542         { 543             return "c"; 544         } 545  546     } 547  548  549     internal class TestPaperB : TestPaper 550     { 551         protected override string Answer1() 552         { 553             return "c"; 554         } 555         protected override string Answer2() 556         { 557             return "b"; 558         } 559         protected override string Answer3() 560         { 561             return "a"; 562         } 563     } 564  565     #endregion 566  567     #region 外观模式 568     ///  569     /// 股票1 570     ///  571     internal class Stock1 572     { 573         public void Sell() 574         { 575             Console.WriteLine("1卖出"); 576         } 577  578         public void Buy() 579         { 580             Console.WriteLine("1买入"); 581         } 582     } 583  584     ///  585     /// 股票2 586     ///  587     internal class Stock2 588     { 589         public void Sell() 590         { 591             Console.WriteLine("2卖出"); 592         } 593  594         public void Buy() 595         { 596             Console.WriteLine("2买入"); 597         } 598     } 599  600     ///  601     /// 投资基金类 602     ///  603     internal class Fund 604     { 605         private Stock1 gu1; 606         private Stock2 gu2; 607  608         public Fund() 609         { 610             gu1 = new Stock1(); 611             gu2 = new Stock2(); 612         } 613  614  615         public void BuyFund() 616         { 617             gu1.Buy(); 618             gu2.Buy(); 619         } 620  621         public void SellFund() 622         { 623             gu1.Sell(); 624             gu2.Sell(); 625         } 626  627  628     } 629  630     #endregion 631  632     #region 建造者模式 633  634     public class Product 635     { 636         IList
parts = new List
(); 637 638 ///
639 /// 添加产品部件 640 /// 641 ///
642 public void Add(string part) 643 { 644 parts.Add(part); 645 } 646 647 ///
648 /// 列举所有的产品部件 649 /// 650 public void Show() 651 { 652 Console.WriteLine("产品 创建 ----"); 653 foreach (var part in parts) 654 { 655 Console.WriteLine(part); 656 } 657 } 658 } 659 660 ///
661 /// 抽象建造者类 662 /// 663 public abstract class Builder 664 { 665 public abstract void BuildePartA(); 666 667 public abstract void BuildePartB(); 668 669 public abstract Product GetResult(); 670 } 671 672 public class ConcreteBuilder1 : Builder 673 { 674 private Product product = new Product(); 675 676 public override void BuildePartA() 677 { 678 product.Add("部件a"); 679 } 680 681 public override void BuildePartB() 682 { 683 product.Add("部件b"); 684 } 685 686 public override Product GetResult() 687 { 688 return product; 689 } 690 } 691 692 public class ConcreteBuilder2 : Builder 693 { 694 private Product product = new Product(); 695 696 public override void BuildePartA() 697 { 698 product.Add("部件XX"); 699 } 700 701 public override void BuildePartB() 702 { 703 product.Add("部件YY"); 704 } 705 706 public override Product GetResult() 707 { 708 return product; 709 } 710 } 711 712 internal class Director 713 { 714 public void Construct(Builder builder) 715 { 716 builder.BuildePartA(); 717 builder.BuildePartB(); 718 } 719 } 720 721 #endregion 722 723 #region 观察者模式 724 725 #region 最终版 726 727 public delegate void EventHandler(); 728 ///
729 /// 通知者接口 730 /// 731 public interface ISubject 732 { 733 void Attach(Observer observer); 734 735 void Detach(Observer observer); 736 737 void Notify(); 738 739 string SubjectState { get; set; } 740 } 741 742 public class Boss : ISubject 743 { 744 private IList
observers = new List
(); 745 private string action; 746 747 public event EventHandler Update; 748 //老板状态 749 public string SubAction 750 { 751 get { return action; } 752 set { action = value; } 753 } 754 ///
755 /// 添加要帮忙的同事 756 /// 757 ///
758 public void Attach(Observer observer) 759 { 760 observers.Add(observer); 761 } 762 763 public void Detach(Observer observer) 764 { 765 observers.Remove(observer); 766 } 767 768 public void Notify1() 769 { 770 Update(); 771 } 772 //通知 773 public void Notify() 774 { 775 foreach (Observer o in observers) 776 { 777 o.Update(); 778 } 779 } 780 public string SubjectState { get; set; } 781 } 782 public abstract class Observer 783 { 784 protected string name; 785 protected ISubject sub; 786 787 public Observer(string name, ISubject sub) 788 { 789 this.name = name; 790 this.sub = sub; 791 } 792 793 public abstract void Update(); 794 } 795 796 ///
797 /// 看股票的 798 /// 799 public class StockObserver : Observer 800 { 801 public StockObserver(string name, ISubject sub) 802 : base(name, sub) 803 { 804 } 805 806 public override void Update() 807 { 808 Console.WriteLine("{0} {1} 关闭股票咯,继续工作。", sub.SubjectState, name); 809 } 810 811 //事件委托实现 812 public void CloseStockMarket() 813 { 814 Console.WriteLine("{0} {1} 关闭股票咯,继续工作。委托", sub.SubjectState, name); 815 } 816 } 817 818 819 ///
820 /// 看NBA的 821 /// 822 public class NBAObserver : Observer 823 { 824 public NBAObserver(string name, ISubject sub) 825 : base(name, sub) 826 { 827 } 828 829 public override void Update() 830 { 831 Console.WriteLine("{0} {1} 关闭NBA咯,继续工作。", sub.SubjectState, name); 832 } 833 834 835 //事件委托实现 836 public void CloseNBA() 837 { 838 Console.WriteLine("{0} {1} 关闭NBA咯,继续工作。委托", sub.SubjectState, name); 839 } 840 } 841 #endregion 842 843 844 845 public class Secretary 846 { 847 private IList
observers = new List
(); 848 private string action; 849 850 ///
851 /// 添加要帮忙的同事 852 /// 853 ///
854 public void Attach(StockObserver observer) 855 { 856 observers.Add(observer); 857 } 858 859 public void Detach(StockObserver observer) 860 { 861 observers.Remove(observer); 862 } 863 864 865 //通知 866 public void Notify() 867 { 868 foreach (StockObserver o in observers) 869 { 870 o.Update(); 871 } 872 } 873 874 //前台状态 875 public string SecretaryAction 876 { 877 get { return action; } 878 set { action = value; } 879 } 880 } 881 882 #endregion 883 884 #region 抽象工厂模式 885 886 public class User 887 { 888 public int id { get; set; } 889 890 public string name { get; set; } 891 892 } 893 894 public interface IUser 895 { 896 void Insert(User user); 897 898 User GetUser(int id); 899 } 900 901 public class SqlserverUser : IUser 902 { 903 public void Insert(User user) 904 { 905 Console.WriteLine("Sqlserver添加一条消息"); 906 } 907 908 public User GetUser(int id) 909 { 910 Console.WriteLine("Sqlserver查询一条消息"); 911 return null; 912 } 913 } 914 915 public class AccessUser : IUser 916 { 917 public void Insert(User user) 918 { 919 Console.WriteLine("Access添加一条消息"); 920 } 921 922 public User GetUser(int id) 923 { 924 Console.WriteLine("Access查询一条消息"); 925 return null; 926 } 927 } 928 929 public interface IFactoryDB 930 { 931 IUser CreateUser(); 932 } 933 934 public class SqlServerFactory : IFactoryDB 935 { 936 public IUser CreateUser() 937 { 938 return new SqlserverUser(); 939 } 940 } 941 942 public class AccessFactory : IFactoryDB 943 { 944 public IUser CreateUser() 945 { 946 return new AccessUser(); 947 } 948 } 949 950 //用简单工厂改进抽象工厂 951 //public class DataAccess 952 //{ 953 // private static readonly string db = "Sqlserver"; 954 // //private static readonly string db = "Access"; 955 956 // public static Iuser 957 //} 958 959 #endregion 960 961 #region 状态模式 962 963 public abstract class State 964 { 965 public abstract void Handle(Context context); 966 } 967 968 public class ConcreteStateA : State 969 { 970 public override void Handle(Context context) 971 { 972 context.State = new ConcreteStateB(); 973 } 974 } 975 976 public class ConcreteStateB : State 977 { 978 public override void Handle(Context context) 979 { 980 context.State = new ConcreteStateA(); 981 } 982 } 983 984 public class Context 985 { 986 private State state; 987 988 public Context(State state) 989 { 990 this.state = state; 991 } 992 993 public State State 994 { 995 get { return state; } 996 set 997 { 998 state = value; 999 Console.WriteLine("当前状态:" + state.GetType().Name);1000 }1001 }1002 1003 public void Request()1004 {1005 state.Handle(this);1006 }1007 }1008 1009 #endregion1010 1011 #region 适配器模式1012 1013 public class Target1014 {1015 public virtual void Request()1016 {1017 Console.WriteLine("普通请求!");1018 }1019 }1020 1021 public class Adaptee1022 {1023 public void SpecificRequest()1024 {1025 Console.WriteLine("特殊请求!");1026 }1027 }1028 1029 public class Adapter : Target1030 {1031 private Adaptee adaptee = new Adaptee();1032 1033 public override void Request()1034 {1035 adaptee.SpecificRequest();1036 }1037 }1038 1039 #endregion1040 1041 #region 备忘录模式1042 ///
1043 /// 发起人1044 /// 1045 public class Originator1046 {1047 public string state { get; set; }1048 1049 public Memento CreateMemento()1050 {1051 return new Memento(state);1052 }1053 1054 public void SetMemento(Memento memento)1055 {1056 state = memento.State;1057 }1058 1059 public void Show()1060 {1061 Console.WriteLine("State=" + state);1062 }1063 }1064 1065 ///
1066 /// 备忘类1067 /// 1068 public class Memento1069 {1070 private string state;1071 1072 public Memento(string state)1073 {1074 this.state = state;1075 }1076 1077 public string State1078 {1079 get { return state; }1080 }1081 }1082 ///
1083 /// 管理者1084 /// 1085 public class Caretaker1086 {1087 public Memento memento { get; set; }1088 }1089 1090 #endregion1091 1092 #region 组合模式1093 1094 public abstract class Component1095 {1096 protected string name;1097 1098 public Component(string name)1099 {1100 this.name = name;1101 }1102 1103 public abstract void Add(Component c);1104 public abstract void Remove(Component c);1105 public abstract void Display(int depth);1106 1107 }1108 1109 public class Leaf : Component1110 {1111 public Leaf(string name)1112 : base(name)1113 {1114 }1115 1116 public override void Add(Component c)1117 {1118 Console.WriteLine("添加");1119 }1120 1121 public override void Remove(Component c)1122 {1123 Console.WriteLine("删除");1124 }1125 1126 public override void Display(int depth)1127 {1128 Console.WriteLine(new string('-', depth) + name);1129 }1130 }1131 1132 public class Composite : Component1133 {1134 private List
children = new List
();1135 public Composite(string name)1136 : base(name)1137 {1138 }1139 1140 public override void Add(Component c)1141 {1142 children.Add(c);1143 }1144 1145 public override void Remove(Component c)1146 {1147 children.Remove(c);1148 }1149 1150 public override void Display(int depth)1151 {1152 Console.WriteLine(new string('-', depth) + name);1153 1154 foreach (Component component in children)1155 {1156 component.Display(depth + 2);1157 }1158 }1159 }1160 1161 #endregion1162 1163 #region 迭代器模式1164 1165 ///
1166 /// Iterator迭代器抽象类1167 /// 1168 public abstract class Iterator1169 {1170 public abstract object First();1171 1172 public abstract object Next();1173 1174 public abstract bool IsDone();1175 public abstract object CurrentItem();1176 }1177 1178 ///
1179 /// 聚集抽象类1180 /// 1181 public abstract class Aggregate1182 {1183 public abstract Iterator CreateIterator();1184 }1185 1186 1187 public class ConcreteIterator : Iterator1188 {1189 private ConcreteAggregate aggregate;1190 private int current = 0;1191 1192 public ConcreteIterator(ConcreteAggregate aggregate)1193 {1194 this.aggregate = aggregate;1195 }1196 1197 public override object First()1198 {1199 return aggregate[0];1200 }1201 1202 public override object Next()1203 {1204 object ret = null;1205 current++;1206 if (current < aggregate.Count)1207 ret = aggregate[current];1208 return ret;1209 }1210 1211 public override bool IsDone()1212 {1213 return current >= aggregate.Count;1214 }1215 1216 public override object CurrentItem()1217 {1218 return aggregate[current];1219 }1220 }1221 1222 1223 public class ConcreteAggregate : Aggregate1224 {1225 private IList
items = new List();1226 public override Iterator CreateIterator()1227 {1228 return new ConcreteIterator(this);1229 }1230 1231 public int Count1232 {1233 get { return items.Count; }1234 }1235 1236 public object this[int index]1237 {1238 get { return items[index]; }1239 set { items.Insert(index, value); }1240 }1241 }1242 1243 #endregion1244 1245 #region 单例模式1246 1247 public class Singleton1248 {1249 public static Singleton instance;1250 1251 private static readonly object syncRoot = new object();1252 private Singleton()1253 {1254 1255 }1256 1257 public static Singleton GetInstance()1258 {1259 //双重锁定1260 if (instance == null)1261 {1262 lock (syncRoot)1263 {1264 if (instance == null)1265 {1266 instance = new Singleton();1267 }1268 }1269 }1270 return instance;1271 }1272 }1273 1274 #endregion1275 1276 #region 桥接模式1277 1278 //public partial class HandsetGame1279 //{1280 // public virtual void Run()1281 // {1282 1283 // }1284 //}1285 1286 //public class HandsetMGame : HandsetGame1287 //{1288 // public override void Run()1289 // {1290 // Console.WriteLine("运行M");1291 // }1292 //}1293 1294 //public class HandsetNGame : HandsetGame1295 //{1296 // public override void Run()1297 // {1298 // Console.WriteLine("运行N");1299 // }1300 //}1301 1302 1303 #region 松耦合的程序1304 /// 1305 /// 手机软件1306 /// 1307 public abstract class HandsetSoft1308 {1309 public abstract void Run();1310 }1311 /// 1312 /// 手机游戏1313 /// 1314 public class HandsetGame : HandsetSoft1315 {1316 public override void Run()1317 {1318 Console.WriteLine("运行手机游戏");1319 }1320 }1321 /// 1322 /// 手机通讯录1323 /// 1324 public class HandsetAddressList : HandsetSoft1325 {1326 public override void Run()1327 {1328 Console.WriteLine("运行手机通讯录");1329 }1330 }1331 1332 /// 1333 /// 手机品牌类1334 /// 1335 public abstract class HandsetBrand1336 {1337 protected HandsetSoft soft;1338 1339 public void SetHandsetSoft(HandsetSoft soft)1340 {1341 this.soft = soft;1342 }1343 1344 public abstract void Run();1345 }1346 1347 public class HandsetBrandM : HandsetBrand1348 {1349 public override void Run()1350 {1351 soft.Run();1352 }1353 }1354 public class HandsetBrandN : HandsetBrand1355 {1356 public override void Run()1357 {1358 soft.Run();1359 }1360 }1361 #endregion1362 #endregion1363 1364 #region 命令模式1365 /// 1366 /// 抽象命令1367 /// 1368 public abstract class Command1369 {1370 protected Barbecuer receiver;1371 1372 public Command(Barbecuer receiver)1373 {1374 this.receiver = receiver;1375 }1376 1377 public abstract void ExcuteCommand();1378 }1379 1380 1381 public class Barbecuer1382 {1383 public void BakeMutton()1384 {1385 Console.WriteLine("烤肉");1386 }1387 1388 public void BakeChickenWing()1389 {1390 Console.WriteLine("鸡翅");1391 }1392 }1393 1394 /// 1395 /// 烤肉1396 /// 1397 public class BakeMuttonCommand : Command1398 {1399 public BakeMuttonCommand(Barbecuer receiver)1400 : base(receiver)1401 {1402 }1403 1404 public override void ExcuteCommand()1405 {1406 receiver.BakeMutton();1407 }1408 }1409 1410 /// 1411 /// 烤鸡翅1412 /// 1413 public class BakeChickenWingCommand : Command1414 {1415 public BakeChickenWingCommand(Barbecuer receiver)1416 : base(receiver)1417 {1418 }1419 1420 public override void ExcuteCommand()1421 {1422 receiver.BakeChickenWing();1423 }1424 }1425 1426 /// 1427 /// 服务员1428 /// 1429 public class Waiter1430 {1431 private IList orders = new List();1432 1433 public void SetOrder(Command command)1434 {1435 if (command.ToString() == "dhsjmsStudy.BakeChickenWingCommand")1436 {1437 Console.WriteLine("鸡翅卖完了!");1438 }1439 else1440 {1441 orders.Add(command);1442 Console.WriteLine("添加订单:" + command + " 时间:" + DateTime.Now);1443 }1444 }1445 1446 public void CancelOrder(Command command)1447 {1448 orders.Remove(command);1449 Console.WriteLine("取消订单:" + command + " 时间:" + DateTime.Now);1450 }1451 1452 public void Notify()1453 {1454 foreach (Command command in orders)1455 {1456 command.ExcuteCommand();1457 }1458 }1459 }1460 1461 #endregion1462 1463 #region 责任链模式1464 1465 public class Request1466 {1467 public string requestType { get; set; }1468 public string requestContent { get; set; }1469 public int numBer { get; set; }1470 }1471 1472 /// 1473 /// 管理者1474 /// 1475 public abstract class Manager1476 {1477 protected string name;1478 1479 //管理者的上级1480 protected Manager superior;1481 1482 public Manager(string name)1483 {1484 this.name = name;1485 }1486 1487 //设置管理者的上级1488 public void SetSuperior(Manager superior)1489 {1490 this.superior = superior;1491 }1492 1493 public abstract void RequestApplications(Request request);1494 }1495 1496 /// 1497 /// 经理1498 /// 1499 public class CommonManager : Manager1500 {1501 public CommonManager(string name)1502 : base(name)1503 {1504 }1505 1506 public override void RequestApplications(Request request)1507 {1508 if (request.requestType == "请假" && request.numBer <= 2)1509 {1510 Console.WriteLine("{0}:{1} 数量{2} 被批准", name, request.requestContent, request.numBer);1511 }1512 else1513 {1514 if (null != superior)1515 superior.RequestApplications(request);1516 }1517 }1518 }1519 1520 /// 1521 /// 总监1522 /// 1523 public class Majordomo : Manager1524 {1525 public Majordomo(string name)1526 : base(name)1527 {1528 }1529 1530 public override void RequestApplications(Request request)1531 {1532 if (request.requestType == "请假" && request.numBer <= 5)1533 {1534 Console.WriteLine("{0}:{1} 数量{2} 被批准", name, request.requestContent, request.numBer);1535 }1536 else1537 {1538 if (null != superior)1539 superior.RequestApplications(request);1540 }1541 }1542 }1543 1544 1545 /// 1546 /// 总经理1547 /// 1548 public class GeneralManager : Manager1549 {1550 public GeneralManager(string name)1551 : base(name)1552 {1553 }1554 1555 public override void RequestApplications(Request request)1556 {1557 if (request.requestType == "请假")1558 {1559 Console.WriteLine("{0}:{1} 数量{2} 被批准", name, request.requestContent, request.numBer);1560 }1561 else if (request.requestType == "加薪" && request.numBer <= 500)1562 {1563 Console.WriteLine("{0}:{1} 数量{2} 被批准", name, request.requestContent, request.numBer);1564 }1565 else if (request.requestType == "加薪" && request.numBer > 500)1566 {1567 Console.WriteLine("{0}:{1} 数量{2} 再说吧", name, request.requestContent, request.numBer);1568 }1569 1570 }1571 }1572 #endregion1573 1574 #region 中介者模式1575 /// 1576 /// 抽象中介类1577 /// 1578 public abstract class Mediator1579 {1580 public abstract void Send(string message, Colleague colleague);1581 }1582 1583 public class ConcreteMediator : Mediator1584 {1585 private ConcreteMediator1 col1;1586 private ConcreteMediator2 col2;1587 1588 public ConcreteMediator1 Col11589 {1590 set { col1 = value; }1591 }1592 1593 public ConcreteMediator2 Col21594 {1595 set { col2 = value; }1596 }1597 public override void Send(string message, Colleague colleague)1598 {1599 if (colleague == col1)1600 {1601 col2.Notify(message);1602 }1603 else1604 {1605 col1.Notify(message);1606 }1607 }1608 }1609 1610 /// 1611 /// 抽象同事类1612 /// 1613 public abstract class Colleague1614 {1615 protected Mediator mediator;1616 1617 public Colleague(Mediator mediator)1618 {1619 this.mediator = mediator;1620 }1621 }1622 public class ConcreteMediator1 : Colleague1623 {1624 public ConcreteMediator1(Mediator mediator)1625 : base(mediator)1626 {1627 }1628 1629 public void Send(string message)1630 {1631 mediator.Send(message, this);1632 }1633 1634 public void Notify(string message)1635 {1636 Console.WriteLine("同事1得到的消息:" + message);1637 }1638 }1639 1640 public class ConcreteMediator2 : Colleague1641 {1642 public ConcreteMediator2(Mediator mediator)1643 : base(mediator)1644 {1645 }1646 1647 public void Send(string message)1648 {1649 mediator.Send(message, this);1650 }1651 1652 public void Notify(string message)1653 {1654 Console.WriteLine("同事2得到的消息:" + message);1655 }1656 }1657 #endregion1658 1659 #region 享元模式1660 1661 public abstract class Flyweight1662 {1663 public abstract void Operation(int extrinsicstate);1664 }1665 1666 public class ConcreteFlyweight : Flyweight1667 {1668 public override void Operation(int extrinsicstate)1669 {1670 Console.WriteLine("具体Flyweight:" + extrinsicstate);1671 }1672 }1673 1674 public class UnshareConcreteFlyweight : Flyweight1675 {1676 public override void Operation(int extrinsicstate)1677 {1678 Console.WriteLine("不共享的具体Flyweight:" + extrinsicstate);1679 }1680 }1681 1682 public class FlyweightFactory1683 {1684 private Hashtable flyweights = new Hashtable();1685 1686 public FlyweightFactory()1687 {1688 flyweights.Add("X", new ConcreteFlyweight());1689 flyweights.Add("Y", new ConcreteFlyweight());1690 flyweights.Add("Z", new ConcreteFlyweight());1691 }1692 1693 public Flyweight GetFlyweight(string key)1694 {1695 return ((Flyweight)flyweights[key]);1696 }1697 }1698 #region 网站享元1699 1700 public abstract class WebSite1701 {1702 public abstract void Use();1703 }1704 1705 /// 1706 /// 具体网站1707 /// 1708 public class ConcreteWebSite : WebSite1709 {1710 private string _name;1711 1712 public ConcreteWebSite(string name)1713 {1714 this._name = name;1715 }1716 1717 public override void Use()1718 {1719 Console.WriteLine("网站分类:" + _name);1720 }1721 }1722 1723 /// 1724 /// 网站工厂类1725 /// 1726 public class WebSiteFactory1727 {1728 private Hashtable flyweights = new Hashtable();1729 1730 //获取网站分类1731 public WebSite GetWebSiteCategory(string key)1732 {1733 if (!flyweights.ContainsKey(key))1734 flyweights.Add(key, new ConcreteWebSite(key));1735 return ((WebSite)flyweights[key]);1736 }1737 1738 public int GetWebSiteCount()1739 {1740 return flyweights.Count;1741 }1742 }1743 1744 #endregion1745 #endregion1746 1747 #region 解释器模式1748 1749 public class Context11750 {1751 public string inPut { get; set; }1752 1753 public string outPut { get; set; }1754 }1755 1756 public class TerminalExpression : AbstractExpression1757 {1758 public override void Interpret(Context1 context)1759 {1760 Console.WriteLine("终端解释器");1761 }1762 }1763 1764 public abstract class AbstractExpression1765 {1766 public abstract void Interpret(Context1 context);1767 }1768 1769 public class NoterminalExpression : AbstractExpression1770 {1771 public override void Interpret(Context1 context)1772 {1773 Console.WriteLine("非终端解释器");1774 }1775 }1776 1777 1778 #endregion1779 1780 #region 访问者模式1781 1782 public abstract class Visitor1783 {1784 public abstract void VisitorConcreteElementA(ConcreteElementA A);1785 public abstract void VisitorConcreteElementB(ConcreteElementB B);1786 }1787 1788 public class ConcreteVisitorA : Visitor1789 {1790 public override void VisitorConcreteElementA(ConcreteElementA A)1791 {1792 Console.WriteLine("{0}被{1}访问", A.GetType().Name, this.GetType().Name);1793 }1794 1795 public override void VisitorConcreteElementB(ConcreteElementB B)1796 {1797 Console.WriteLine("{0}被{1}访问", B.GetType().Name, this.GetType().Name);1798 }1799 }1800 1801 public class ConcreteVisitorB : Visitor1802 {1803 public override void VisitorConcreteElementA(ConcreteElementA A)1804 {1805 Console.WriteLine("{0}被{1}访问", A.GetType().Name, this.GetType().Name);1806 }1807 1808 public override void VisitorConcreteElementB(ConcreteElementB B)1809 {1810 Console.WriteLine("{0}被{1}访问", B.GetType().Name, this.GetType().Name);1811 }1812 }1813 1814 public abstract class Element1815 {1816 public abstract void Accept(Visitor visitor);1817 }1818 1819 public class ConcreteElementA : Element1820 {1821 public override void Accept(Visitor visitor)1822 {1823 visitor.VisitorConcreteElementA(this);1824 }1825 1826 public void OperationA()1827 {1828 1829 }1830 }1831 1832 public class ConcreteElementB : Element1833 {1834 public override void Accept(Visitor visitor)1835 {1836 visitor.VisitorConcreteElementB(this);1837 }1838 1839 public void OperationB()1840 {1841 1842 }1843 }1844 1845 /// 1846 /// 提供高层接口,允许访问者访问1847 /// 1848 public class ObjectStructure1849 {1850 private IList
elements = new List
();1851 1852 public void Attach(Element element)1853 {1854 elements.Add(element);1855 }1856 1857 public void Detach(Element element)1858 {1859 elements.Remove(element);1860 }1861 1862 public void Accept(Visitor visitor)1863 {1864 foreach (Element e in elements)1865 {1866 e.Accept(visitor);1867 }1868 }1869 }1870 1871 #endregion1872 class Program1873 {1874 1875 public static operation CreateOperate(string operate)1876 {1877 operation oper = null;1878 switch (operate)1879 {1880 case "+":1881 oper = new Add();1882 break;1883 case "-":1884 oper = new Sub();1885 break;1886 case "*":1887 oper = new Div();1888 break;1889 case "/":1890 oper = new Mlu();1891 break;1892 }1893 return oper;1894 }1895 1896 public static CashSuper CreateCashAccept(string type)1897 {1898 CashSuper cs = null;1899 switch (type)1900 {1901 case "正常消费":1902 cs = new CashNormal();1903 break;1904 case "满300返100":1905 cs = new CashReturn("300", "100");1906 break;1907 case "打八折":1908 cs = new CashRebate("0.8");1909 break;1910 }1911 return cs;1912 }1913 1914 static void Main(string[] args)1915 {1916 #region 简单工厂模式1917 //operation oper = Program.CreateOperate("*");1918 //oper.numberB = 10;1919 //oper.numberA = 11;1920 //Console.WriteLine(oper.GetResult());1921 #endregion1922 1923 #region 策略模式与简单工厂组合1924 //CashContext cc = new CashContext("满300返100");1925 //double totalPrices = cc.GetResult(10000);1926 //Console.WriteLine(totalPrices);1927 #endregion1928 1929 #region 单一原则1930 //如果一个类承担的职责过多,就等于把这些职责耦合在一起。1931 //一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。1932 //这种耦合会导致脆弱的设计,当发生变化时,设计会遭受意想不到的破坏【ASD】。1933 1934 //软件设计真正要做的许多内容,就是发现职责并相互分离。1935 //如果你能够想到多于一个的动机去改变一个类,那么这个类就具备多于一个的职责,1936 //就应该考虑类的职责分离。1937 #endregion1938 1939 #region 开放-封闭原则1940 //(大话代码结构)将BLL的业务逻辑开放,将修改等数据处理封闭。1941 1942 //(大话设计模式)软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。1943 //对于扩展是开放的,对于更改是封闭的。1944 1945 //对于需求、程序改动是通过增加新代码进行的,而不是更改现有代码。1946 #endregion1947 1948 #region 依赖倒转原则1949 //针对于接口编程,不要对实现编程。1950 1951 //A.高层模块不应该依赖底层模块。两个都依赖抽象。1952 //B.抽象不应依赖细节,细节应依赖抽象。1953 #endregion1954 1955 #region 里氏代换原则1956 //子类型必须能够替换它们的父类型。1957 #endregion1958 1959 #region 装饰模式1960 //动态地给一个对象添加一些额外的职能,1961 //就增加功能来说,装饰模式比生成子类更灵活1962 1963 //Person ly = new Person("蝼蚁");1964 //Console.WriteLine("第一种装扮:");1965 //Finery dtx = new Tshirts();1966 //Finery kk = new BigTrouser();1967 //dtx.Decorate(ly);1968 //kk.Decorate(dtx);1969 //kk.Show();1970 #endregion1971 1972 #region 代理模式1973 ////为其他对象提供一种代理以控制对这个对象的访问1974 //BZQ jiaojiao = new BZQ();1975 //jiaojiao.Name = "娇娇";1976 1977 //代理人 daili = new 代理人(jiaojiao);1978 //daili.SH();1979 //daili.WatchTv();1980 #endregion1981 1982 #region 工厂方法模式1983 //I工厂 operFactory = new AddFactory();1984 //operation oper = operFactory.CreateOperation();1985 //oper.numberA = 1;1986 //oper.numberB = 2;1987 //Console.WriteLine(oper.GetResult());1988 1989 ////大学生和志愿者可以通过实例化不同类实现。1990 ////IFactory factory= new UndergraduateFactory();1991 //IFactory factory = new VolunteerFactory();1992 //LeiFeng leifeng = factory.CreateLeiFeng();1993 //leifeng.BuyRice();1994 //leifeng.Sweep();1995 //leifeng.Wash();1996 1997 #endregion1998 1999 #region 原型模式2000 ////用原型实例指定创建对象的种类,2001 ////并通过拷贝这些原型创建新的对象。2002 2003 ////ConcretePrototype pl = new ConcretePrototype("I");2004 ////ConcretePrototype cl = (ConcretePrototype)pl.Clone();2005 2006 ////Console.WriteLine("Clone:{0}", cl.Id);2007 ////Clone复制结构不复制数据2008 ////Copy复制结构也复制数据2009 2010 //Resume a = new Resume("test");2011 //a.SetPersonalInfo("男", "22");2012 //a.SetWorkExperience("1995-2018", "xx公司");2013 2014 ////此处Clone()=>实则是在重新实例化一个Resume再赋值2015 //Resume b = (Resume)a.Clone();2016 //b.SetWorkExperience("1998-2006", "yy公司");2017 2018 //Resume c = (Resume)a.Clone();2019 //c.SetWorkExperience("1998-2006", "zz公司");2020 2021 //a.Display();2022 //b.Display();2023 //c.Display();2024 #endregion2025 2026 #region 模板方法模式2027 ////定义一个操作中的算法的骨架,2028 ////而将一些步骤延迟到子类中。2029 ////使得子类可以不改变一个算法的结构2030 ////即可重定义该算法的某些特定步骤。2031 //Console.WriteLine("考试A");2032 //TestPaper studentA = new TestPaperA();2033 //studentA.TestQuestion1();2034 //studentA.TestQuestion2();2035 //studentA.TestQuestion3();2036 2037 //Console.WriteLine("考试B");2038 //TestPaper studentB = new TestPaperB();2039 //studentB.TestQuestion1();2040 //studentB.TestQuestion2();2041 //studentB.TestQuestion3();2042 2043 #endregion2044 2045 #region 迪米特法则2046 //如果两个类不必彼此直接通信,2047 //那么这两个类就不应当发生直接的相互作用。2048 //如果其中一个类需要调用另一个类的某一个方法的话,2049 //可以通过第三者转发这个调用。2050 2051 //如果再公司电脑坏了,可以寻求该IT部门,而不是直接找某个人。2052 #endregion2053 2054 #region 外观模式2055 ////为子系统中的一组接口提供一个一致的界面,2056 ////此模式定义了一个高层接口,使得子系统更容易使用。2057 ////遇到复杂庞大的系统维护时,我们可添加一个简单的接口,2058 ////减少它们之间的依赖。2059 2060 ////Stock1 gu1 = new Stock1();2061 ////Stock2 gu2 = new Stock2();2062 2063 ////gu1.Buy();2064 ////gu2.Buy();2065 2066 ////gu1.Sell();2067 ////gu2.Sell();2068 2069 //Fund jijin = new Fund();2070 //jijin.BuyFund();2071 //jijin.SellFund();2072 #endregion2073 2074 #region 建造者模式2075 ////将一个复杂对象的构造与它的表示分离,2076 ////使得同样的构造过程可以创建不同的表示。2077 2078 //Director director = new Director();2079 //Builder b1 = new ConcreteBuilder1();2080 //Builder b2 = new ConcreteBuilder2();2081 2082 //director.Construct(b1);2083 //Product p1 = b1.GetResult();2084 //p1.Show();2085 2086 //director.Construct(b2);2087 //Product p2 = b2.GetResult();2088 //p2.Show();2089 #endregion2090 2091 #region 观察者模式2092 ////定义一种一对多的依赖关系,2093 ////让多个观察者对象同时监听某一个主题对象。2094 ////当这个主题对象变化时,会通知所有观察对象,2095 ////使它们能自动更新自己。2096 2097 //Secretary qiantai = new Secretary();2098 //StockObserver tongzhi1 = new StockObserver("通知人1", qiantai);2099 //StockObserver tongzhi2 = new StockObserver("通知人2", qiantai);2100 2101 //qiantai.Attach(tongzhi1);2102 //qiantai.Attach(tongzhi2);2103 2104 //qiantai.SecretaryAction = "老板来了!";2105 //qiantai.Notify();2106 2107 #region 最终版2108 //Boss huhansan = new Boss();2109 2110 //StockObserver tongzhi1 = new StockObserver("通知人1", huhansan);2111 //NBAObserver tongzhi2 = new NBAObserver("通知人2", huhansan);2112 2113 //huhansan.Attach(tongzhi1);2114 //huhansan.Attach(tongzhi2);2115 2116 //huhansan.Detach(tongzhi1);2117 2118 //huhansan.SubjectState = "我胡汉三又回来啦";2119 2120 //huhansan.Notify();2121 #endregion2122 2123 #region 事件委托2124 //Boss huhansan = new Boss();2125 2126 //StockObserver tongzhi1 = new StockObserver("通知人1", huhansan);2127 //NBAObserver tongzhi2 = new NBAObserver("通知人2", huhansan);2128 //huhansan.Update += new EventHandler(tongzhi1.CloseStockMarket);//应该是把tongzhi1对象给一起传入方法了。2129 //huhansan.Update += new EventHandler(tongzhi2.CloseNBA);2130 //huhansan.SubjectState = "我胡汉三又回来啦";2131 //huhansan.Notify1();2132 #endregion2133 #endregion2134 2135 #region 抽象工厂模式2136 //提供一个创建一系列相关或相互依赖对象的接口,2137 //而无需指定它们的具体类。2138 2139 //User user = new User();2140 //IFactoryDB factory = new SqlServerFactory();2141 //IUser iu = factory.CreateUser();2142 //iu.Insert(user);2143 //iu.GetUser(1);2144 2145 //用反射+抽象工厂的数据访问程序2146 2147 #endregion2148 2149 #region 状态模式2150 ////当一个对象的内在状态改变时允许改变其行为,2151 ////这个对象看起来像是改变了其类。2152 2153 //Context c = new Context(new ConcreteStateA());2154 //c.Request();2155 //c.Request();2156 //c.Request();2157 //c.Request();2158 #endregion2159 2160 #region 适配器模式2161 //将一个类的接口转换成客户希望的另一个接口,2162 //Adapter模式使得原本由于接口不兼容而不能一起工作的类,2163 //可以一起工作。2164 2165 //Target target = new Adapter();2166 //target.Request();2167 #endregion2168 2169 #region 备忘录模式2170 ////在不破坏封装性的前提下,2171 ////捕获一个对象的内部状态,2172 ////并在该对象之外保存这个状态。2173 //Originator o = new Originator();2174 //o.state = "On";2175 //o.Show();2176 2177 //Caretaker c = new Caretaker();2178 //c.memento = o.CreateMemento();2179 2180 //o.state = "off";2181 //o.Show();2182 2183 //o.SetMemento(c.memento);2184 //o.Show();2185 2186 #endregion2187 2188 #region 组合模式2189 ////将对象组合成树形结构以表示“部分-整体”的层次结构。2190 ////组合模式使得用户对单个对象和组合对象的使用具有一致性。2191 2192 ////生成根节点2193 //Composite root = new Composite("root");2194 //root.Add(new Leaf("Leaf A"));2195 //root.Add(new Leaf("Leaf B"));2196 2197 ////根上长出分支2198 //Composite comp = new Composite("Composite X");2199 //comp.Add(new Leaf("Leaf XA"));2200 //comp.Add(new Leaf("Leaf XB"));2201 2202 //root.Add(comp);2203 2204 //Composite comp2 = new Composite("Composite XY");2205 //comp.Add(new Leaf("Leaf XYA"));2206 //comp.Add(new Leaf("Leaf XYB"));2207 2208 //comp.Add(comp2);2209 //root.Add(new Leaf("Leaf C"));2210 2211 //Leaf leaf = new Leaf("Leaf D");2212 //root.Add(leaf);2213 //root.Remove(leaf);2214 2215 ////显示大树2216 //root.Display(1);2217 #endregion2218 2219 #region 迭代器模式2220 //ConcreteAggregate a = new ConcreteAggregate();2221 //for (int i = 0; i < 10; i++)2222 //{2223 // a[i] = i;2224 //}2225 2226 //Iterator i1 = new ConcreteIterator(a);2227 //while (!i1.IsDone())2228 //{2229 // Console.WriteLine("{0} 请买票!", i1.CurrentItem());2230 // i1.Next();2231 //}2232 #endregion2233 2234 #region 单例模式2235 ////保证一个类仅有一个实例,2236 ////并提供一个访问它的全局访问点。2237 2238 //Singleton s1 = Singleton.GetInstance();2239 //Singleton s2 = Singleton.GetInstance();2240 2241 //if (s1 == s2)2242 // Console.WriteLine("相同实例");2243 2244 2245 #endregion2246 2247 #region 桥接模式2248 //将抽象部分与它的实现部分分离,2249 //使它们都可以独立变化。2250 2251 //同样一个东西,运行在不同平台。2252 //只要把东西弄好,其他平台继承后实现父类即可。2253 2254 ////HandsetGame a;2255 ////a = new HandsetMGame();2256 ////a.Run();2257 2258 ////a= new HandsetNGame();2259 ////a.Run();2260 2261 //HandsetBrand hb;2262 //hb = new HandsetBrandM();2263 2264 //hb.SetHandsetSoft(new HandsetGame());2265 //hb.Run();2266 2267 //hb.SetHandsetSoft(new HandsetAddressList());2268 //hb.Run();2269 2270 //hb = new HandsetBrandN();2271 2272 //hb.SetHandsetSoft(new HandsetGame());2273 //hb.Run();2274 2275 //hb.SetHandsetSoft(new HandsetAddressList());2276 //hb.Run();2277 2278 #endregion2279 2280 #region 合成/聚合复用原则2281 //尽量使用合成/聚合,2282 //尽量不要使用类继承2283 #endregion2284 2285 #region 命令模式2286 ////将一个请求封装为一个对象,2287 ////从而使你可用不同的请求对客户进行参数化;2288 ////对请求排队或记录请求日志,以及支持可撤销的操作。2289 //Barbecuer boy = new Barbecuer();2290 //Command c1 = new BakeMuttonCommand(boy);2291 //Command c2 = new BakeMuttonCommand(boy);2292 //Command c3 = new BakeChickenWingCommand(boy);2293 2294 //Waiter girl = new Waiter();2295 //girl.SetOrder(c1);2296 //girl.SetOrder(c2);2297 //girl.SetOrder(c3);2298 2299 //girl.Notify();2300 2301 #endregion2302 2303 #region 责任链模式2304 ////使多个对象都有机会处理请求,2305 ////从而避免请求的发送者和接收者的耦合关系。2306 ////将这个对象连成一条链,并沿着这条链传递该请求,2307 ////直到有一个对象处理它为止。2308 //CommonManager jinli = new CommonManager("金立");2309 //Majordomo zongjian = new Majordomo("宗建");2310 //GeneralManager zongjingli = new GeneralManager("宗金丽");2311 2312 //jinli.SetSuperior(zongjian);2313 //zongjian.SetSuperior(zongjingli);2314 2315 //Request request = new Request();2316 //request.requestType = "请假";2317 //request.requestContent = "小菜请假";2318 //request.numBer = 1;2319 //jinli.RequestApplications(request);2320 2321 //Request request2 = new Request();2322 //request2.requestType = "请假";2323 //request2.requestContent = "小菜请假";2324 //request2.numBer = 1;2325 //jinli.RequestApplications(request2);2326 2327 //Request request3 = new Request();2328 //request3.requestType = "加薪";2329 //request3.requestContent = "小菜请求加薪";2330 //request3.numBer = 500;2331 //jinli.RequestApplications(request3);2332 2333 //Request request4 = new Request();2334 //request4.requestType = "加薪";2335 //request4.requestContent = "小菜请求加薪";2336 //request4.numBer = 1000;2337 //jinli.RequestApplications(request4);2338 #endregion2339 2340 #region 中介者模式2341 //用一个中介对象来封装一系列的对象交互,2342 //中介者使各对象不需要显式地互相调用,2343 //从而使其耦合松散,而且可以独立地改变它们之间的交互。2344 2345 ConcreteMediator m = new ConcreteMediator();2346 ConcreteMediator1 c1 = new ConcreteMediator1(m);2347 ConcreteMediator2 c2 = new ConcreteMediator2(m);2348 2349 m.Col1 = c1;2350 m.Col2 = c2;2351 2352 c1.Send("发送消息");2353 c2.Send("收到消息");2354 2355 #endregion2356 2357 #region 享元模式2358 //运用共享技术有效地支持大量细粒度的对象。2359 ////int ext = 22;2360 2361 ////FlyweightFactory f = new FlyweightFactory();2362 2363 ////Flyweight fx = f.GetFlyweight("X");2364 ////fx.Operation(--ext);2365 2366 ////Flyweight fy = f.GetFlyweight("Y");2367 ////fy.Operation(--ext);2368 2369 ////Flyweight fz = f.GetFlyweight("Z");2370 ////fz.Operation(--ext);2371 2372 ////UnshareConcreteFlyweight uf = new UnshareConcreteFlyweight();2373 ////uf.Operation(--ext);2374 2375 //WebSiteFactory f = new WebSiteFactory();2376 2377 //WebSite fx = f.GetWebSiteCategory("产品展示");2378 //fx.Use();2379 2380 //WebSite fy = f.GetWebSiteCategory("产品展示");2381 //fy.Use();2382 2383 //WebSite f1 = f.GetWebSiteCategory("博客");2384 //f1.Use();2385 2386 //WebSite f2 = f.GetWebSiteCategory("博客");2387 //f2.Use();2388 2389 //Console.WriteLine("网站分类总数为{0}",f.GetWebSiteCount());2390 #endregion2391 2392 #region 解释器模式2393 ////给定一个语言,定义它的文法的一种表示,2394 ////并定义一个解释器,2395 ////这个解释器使用该表示来解释语言中的句子。2396 //Context1 context = new Context1();2397 //IList
list = new List
();2398 //list.Add(new TerminalExpression());2399 //list.Add(new NoterminalExpression());2400 //list.Add(new TerminalExpression());2401 //list.Add(new TerminalExpression());2402 2403 //foreach (AbstractExpression exp in list)2404 //{2405 // exp.Interpret(context);2406 //}2407 #endregion2408 2409 #region 访问者模式2410 ////表示一个作用于某对象结构的各元素操作。2411 ////它使你可以在不改变各元素的类的前提下2412 ////定义作用于这些元素的新操作。2413 //ObjectStructure o = new ObjectStructure();2414 //o.Attach(new ConcreteElementA());2415 //o.Attach(new ConcreteElementB());2416 2417 //ConcreteVisitorA v1 = new ConcreteVisitorA();2418 //ConcreteVisitorB v2 = new ConcreteVisitorB();2419 //o.Accept(v1);2420 //o.Accept(v2);2421 #endregion2422 }2423 }2424 }
大话设计模式代码

 

转载于:https://www.cnblogs.com/Zhengxue/p/8807807.html

你可能感兴趣的文章
第三节
查看>>
PHP结合MYSQL记录结果分页呈现(比较实用)
查看>>
Mysql支持的数据类型
查看>>
openSuse beginner
查看>>
Codeforces 620E(线段树+dfs序+状态压缩)
查看>>
Windows7中双击py文件运行程序
查看>>
Market entry case
查看>>
bzoj1230 开关灯 线段树
查看>>
LinearLayout
查看>>
学习python:day1
查看>>
css3动画属性
查看>>
第九次团队作业-测试报告与用户使用手册
查看>>
Equal Sides Of An Array
查看>>
CentOS笔记-用户和用户组管理
查看>>
Mongodb 基本命令
查看>>
Qt中QTableView中加入Check列实现
查看>>
“富豪相亲大会”究竟迷失了什么?
查看>>
控制文件的备份与恢复
查看>>
返回代码hdu 2054 A==B?
查看>>
Flink独立集群1
查看>>