static void Main(string[] args) { #region 01 Creation Patterns #region 01 Abstract Factory //ISmartPhone smartPhone; //INormalPhone normalPhone; IMobilePhone nokiaPhone = new Nokia(); Console.WriteLine(nokiaPhone.GetNormalPhone().GetModelDetials()); Console.WriteLine(nokiaPhone.GetSmartPhone().GetModelDetials()); IMobilePhone samsungPhone = new Samsung(); Console.WriteLine(samsungPhone.GetNormalPhone().GetModelDetials()); Console.WriteLine(samsungPhone.GetSmartPhone().GetModelDetials()); #endregion #region 02 Factory Method //Document[] documents = new Document[2]; var documents = new List <Document>(); documents.Add(new Resume()); documents.Add(new Report()); foreach (var item in documents) { Console.WriteLine("-" + item.GetType().Name); foreach (var page in item.Pages) { Console.WriteLine(" -" + page.GetType().Name); } } #endregion #endregion #region 02 Structural Patterns #region 07 Proxy IMath proxy = new MathProxy(); Console.WriteLine("4 + 2 = " + proxy.Add(4, 2)); Console.WriteLine("4 - 2 = " + proxy.Sub(4, 2)); Console.WriteLine("4 * 2 = " + proxy.Mul(4, 2)); Console.WriteLine("4 / 2 = " + proxy.Div(4, 2)); #endregion #endregion #region 03 Behavioral Patterns #endregion FinishProgram(); }
public static void Main( string[] args ) { // Create math proxy MathProxy p = new MathProxy(); // Do the math Console.WriteLine( "4 + 2 = {0}", p.Add( 4, 2 ) ); Console.WriteLine( "4 - 2 = {0}", p.Sub( 4, 2 ) ); Console.WriteLine( "4 * 2 = {0}", p.Mul( 4, 2 ) ); Console.WriteLine( "4 / 2 = {0}", p.Div( 4, 2 ) ); Console.Read(); }
static void Main() { // Create math proxy IMath p = new MathProxy(); // Do the math Console.WriteLine("4 + 2 = " + p.Add(4, 2)); Console.WriteLine("4 - 2 = " + p.Sub(4, 2)); Console.WriteLine("4 * 2 = " + p.Mul(4, 2)); Console.WriteLine("4 / 2 = " + p.Div(4, 2)); // Wait for user Console.Read(); }
static void Main(string[] args) { // Create math proxy MathProxy proxy = new MathProxy(); // Do the math Console.WriteLine("4 + 2 = " + proxy.Add(4, 2)); Console.WriteLine("4 - 2 = " + proxy.Sub(4, 2)); Console.WriteLine("4 * 2 = " + proxy.Mul(4, 2)); Console.WriteLine("4 / 2 = " + proxy.Div(4, 2)); // Wait for user Console.ReadKey(true); }
//Замісник - Proxy public Run Proxy() { Console.WriteLine("\nProxy:"); // Create math proxy MathProxy p = new MathProxy(); // Do the math Console.WriteLine("4 + 2 = " + p.Add(4, 2)); Console.WriteLine("4 - 2 = " + p.Sub(4, 2)); Console.WriteLine("4 * 2 = " + p.Mul(4, 2)); Console.WriteLine("4 / 2 = " + p.Div(4, 2)); return(this); }
public void CheckCupWinner(string cupName) { List <ScoreStatus> ScoresStatusList = new List <ScoreStatus>(); GamePersonTesting getGameAndUser = new GamePersonTesting(); var getAllPersons = getGameAndUser.PersonData(); var returned = ""; int amountScores = 0; int amountGames = 0; double percentage = 0; var ScoresList = getGameAndUser.ScoresData(); var GamesList = getGameAndUser.GamesData(); var getOutGames = GamesList.Where(x => x.Name == cupName); foreach (var items in getAllPersons) { var text = $"{items.ContestNumber} {items.FirstName} {items.LastName}"; amountScores = ScoresList.Where(x => x.Winner == text).Count(); amountGames = getOutGames.Where(x => x.PersonOne == text || x.PersonTwo == text).Count(); MathProxy proxy = new MathProxy(); if (amountGames >= 10) { if (amountScores == 0) { percentage = proxy.Mul(amountScores, amountGames); } percentage = proxy.Div((amountScores * 100), amountGames); var ScoresStatus = new ScoreStatus(amountGames, amountScores, items.FirstName, items.LastName, percentage, items.ContestNumber); ScoresStatusList.Add(ScoresStatus); } } var sort = ScoresStatusList.OrderByDescending(x => x.Percentage).FirstOrDefault(); returned = $"{sort.ContestNumber} {sort.FirstName} {sort.LastName}"; Assert.True(sort.ContestNumber == 1 && sort.FirstName == "Emma" && sort.LastName == "Pestin"); }
private static void ShowProxy() { Console.WriteLine("================================================"); Console.WriteLine("Pattern code (Proxy):"); Proxy proxy = new Proxy(); proxy.Request(); Console.WriteLine("\nReal code (Proxy):"); // Create math proxy MathProxy mathProxy = new MathProxy(); // Do the math Console.WriteLine("4 + 2 = " + mathProxy.Add(4, 2)); Console.WriteLine("4 - 2 = " + mathProxy.Sub(4, 2)); Console.WriteLine("4 * 2 = " + mathProxy.Mul(4, 2)); Console.WriteLine("4 / 2 = " + mathProxy.Div(4, 2)); }
static void Main(string[] args) { // Create math proxy MathProxy proxy = new MathProxy(); // Do the math Console.WriteLine("4 + 2 = " + proxy.Add(4, 2)); Console.WriteLine("4 - 2 = " + proxy.Sub(4, 2)); Console.WriteLine("4 * 2 = " + proxy.Mul(4, 2)); Console.WriteLine("4 / 2 = " + proxy.Div(4, 2)); // Wait for user Console.ReadKey(); }
public void ProxyTest() { // Create math proxy MathProxy proxy = new MathProxy(); // Do the math Console.WriteLine("4 + 2 = " + proxy.Add(4, 2)); Console.WriteLine("4 - 2 = " + proxy.Sub(4, 2)); Console.WriteLine("4 * 2 = " + proxy.Mul(4, 2)); Console.WriteLine("4 / 2 = " + proxy.Div(4, 2)); // Wait for user Console.ReadKey(); }
static void ProxyTester() { #region sample 1 var proxy = new Proxy(); proxy.Request(); #endregion #region sample 2 var proxyImplement = new MathProxy(); // Do the math Console.WriteLine("4 + 2 = " + proxyImplement.Add(4, 2)); Console.WriteLine("4 - 2 = " + proxyImplement.Sub(4, 2)); Console.WriteLine("4 * 2 = " + proxyImplement.Mul(4, 2)); Console.WriteLine("4 / 2 = " + proxyImplement.Div(4, 2)); #endregion }
private static async Task Main(string[] args) { Console.WriteLine("Hello World!"); IMathProxy mathProxy = new MathProxy(); var result = await mathProxy.Add(2, 2); Console.WriteLine($"Add : {result}"); result = await mathProxy.Sub(4, 2); Console.WriteLine($"Sub : {result}"); result = await mathProxy.Mul(2, 2); Console.WriteLine($"Mul : {result}"); var resultDiv = await mathProxy.Div(10, 2); Console.WriteLine($"Div : {resultDiv}"); }
public string GetWinnerOfSpecificContest(string name) { List <Scores> ScoresList = new List <Scores>(); List <Game> GamesList = new List <Game>(); List <ScoreStatus> ScoresStatusList = new List <ScoreStatus>(); ScoreCollection.Reading(); //läser in användarna GameCollection.Reading(); //läser in alla matcher PersonCollection.Reading(); var getScores = ScoreCollection.GetEnumerator(); var getGames = GameCollection.GetEnumerator(); var getAllPersons = PersonCollection.GetEnumerator(); foreach (var items in getScores) { ScoresList.Add(items); } foreach (var items in getGames) { if (items.Name == name) { GamesList.Add(items); } } var percentage = 0.0; var amountScores = 0; //Hur många gånger en person återkommer i Gamesfilen var amountGames = 0; foreach (var items in getAllPersons) { var text = $"{items.ContestNumber} {items.FirstName} {items.LastName}"; amountScores = ScoresList.Where(x => x.Winner == text).Count(); amountGames = GamesList.Where(x => x.PersonOne == text || x.PersonTwo == text).Count(); // Create math proxy MathProxy proxy = new MathProxy(); if (amountGames >= 10) { if (amountScores == 0) { percentage = proxy.Mul(amountScores, amountGames); } percentage = proxy.Div((amountScores * 100), amountGames); var ScoresStatus = new ScoreStatus(amountGames, amountScores, items.FirstName, items.LastName, percentage, items.ContestNumber); ScoresStatusList.Add(ScoresStatus); } } if (ScoresStatusList.Count > 0) { var sort = ScoresStatusList.OrderByDescending(x => x.Percentage).FirstOrDefault(); //return $"Årets champion: {sort.FirstName} {sort.LastName} vinnar andel: {sort.Percentage}%"; return($"{sort.ContestNumber} {sort.FirstName} {sort.LastName}"); } else { return("Ingen användare har spelat mer än 10 matcher"); } }
static void Main(string[] args) { /////////////////////// Strategy Pattern //IHornStrategy audiHorn = new AudiHornStrategy(); //IHornStrategy bmwHorn = new BMWHornStrategy(); //Car car = new Car(audiHorn); //Car carb = new Car(bmwHorn); //Console.WriteLine(car.PressHorn()); //Console.WriteLine(carb.PressHorn()); ////////////////////////// ////////////////////////// Observer Pattern //Console.WriteLine("Please enter the temperature?"); //string temperature = Console.ReadLine(); //IObservable wheaterStation = new WheaterStation(); //IObserver mobilePhone = new MobilePhone(); //wheaterStation.Add(mobilePhone); //IObserver tablet = new Tablet(); //wheaterStation.Add(tablet); //wheaterStation.Notify(temperature); ////////////////////////// ////////////////////////// Decorator Pattern //Beverage cofee = new Expresso(new CaramelDecorator()); //Beverage tea = new Tea(new MilkDecorator()); //Console.WriteLine("Cofee with caramel: " + cofee.Cost()); //Console.WriteLine("Tea with milk: " + tea.Cost()); ////////////////////////// ////////////////////////// FactoryMethodPattern //ShapeFactory shapeFactory = new ShapeFactory(); //var shape = shapeFactory.GetShape(ShapeTypes.Circle); //Console.WriteLine("You drew a " + shape.Draw()); //var shape1 = shapeFactory.GetShape(ShapeTypes.Rectangle); //Console.WriteLine("You drew a " + shape1.Draw()); //var shape2 = shapeFactory.GetShape(ShapeTypes.Square); //Console.WriteLine("You drew a " + shape2.Draw()); ////////////////////////// ////////////////////////// AbstractFactoryPattern //IMobilePhone nokiaMobilePhone = new Nokia(); //MobileAbstractFactory nokiaClient = new MobileAbstractFactory(nokiaMobilePhone); //Console.WriteLine("********* NOKIA **********"); //Console.WriteLine(nokiaClient.GetSmartPhoneModelDetails()); //Console.WriteLine(nokiaClient.GetNormalPhoneModelDetails()); //IMobilePhone samsungMobilePhone = new Samsung(); //MobileAbstractFactory samsungClient = new MobileAbstractFactory(samsungMobilePhone); //Console.WriteLine("******* SAMSUNG **********"); //Console.WriteLine(samsungClient.GetSmartPhoneModelDetails()); //Console.WriteLine(samsungClient.GetNormalPhoneModelDetails()); ////////////////////////// ////////////////////////// Adapter Pattern //IAdapter adapter = null; //Let emulate the decision where the choice of using the underlying system is made //Console.WriteLine("Enter which library you wanna use to do operation {1,2}"); //int x = Console.Read(); //if (x == '1') //{ // //Let us choose to use Library one to do something // adapter = new AdapterOne(); //} //else if (x == '2') //{ // //Let us choose to use Library two to do something // adapter = new AdapterTwo(); //} ////Just do the operation now //adapter.Do(); ////////////////////////// ///////////////////////// Facade //MortgageFacade mortgage = new MortgageFacade(); //// Evaluate mortgage eligibility for customer //Customer customer = new Customer("Ann McKinsey"); //bool eligible = mortgage.IsEligible(customer, 125000); //Console.WriteLine("\n" + customer.Name + // " has been " + (eligible ? "Approved" : "Rejected")); /////////////////////// ///////////////////////// ProxyPattern MathProxy proxy = new MathProxy(); // Do the math Console.WriteLine("4 + 2 = " + proxy.Add(4, 2)); Console.WriteLine("4 - 2 = " + proxy.Sub(4, 2)); Console.WriteLine("4 * 2 = " + proxy.Mul(4, 2)); Console.WriteLine("4 / 2 = " + proxy.Div(4, 2)); /////////////////////// Console.ReadKey(); }
static void Main(string[] args) { AbstractPlatform _platform = configurationPlatform(); _platform.Paint(); Console.WriteLine("==========================================================================="); Console.WriteLine("================================== Stragery ==============================="); var reports = new List <DeveloperReport> { new DeveloperReport { Id = 1, Name = "Dev1", Level = DeveloperLevel.Senior, HourlyRate = 30.5, WorkingHours = 160 }, new DeveloperReport { Id = 2, Name = "Dev2", Level = DeveloperLevel.Junior, HourlyRate = 20, WorkingHours = 120 }, new DeveloperReport { Id = 3, Name = "Dev3", Level = DeveloperLevel.Senior, HourlyRate = 32.5, WorkingHours = 130 }, new DeveloperReport { Id = 4, Name = "Dev4", Level = DeveloperLevel.Junior, HourlyRate = 24.5, WorkingHours = 140 } }; var calculatorContext = new SalaryCalculator(new JuniorDevSalaryCalculator()); var juniorTotal = calculatorContext.Calculate(reports); Console.WriteLine($"Total amount for junior salaries is: {juniorTotal}"); calculatorContext.SetCalculator(new SeniorDevSalaryCalculator()); var seniorTotal = calculatorContext.Calculate(reports); Console.WriteLine($"Total amount for senior salaries is: {seniorTotal}"); Console.WriteLine($"Total cost for all the salaries is: {juniorTotal + seniorTotal}"); Console.WriteLine("==========================================================================="); Console.WriteLine("================================== IoC ==============================="); BussinessLogic _bussinessLogic = new BussinessLogic(); _bussinessLogic.Task1(); Console.WriteLine("==========================================================================="); Console.WriteLine("================================== Flyweight ==============================="); // The client code usually creates a bunch of pre-populated // flyweights in the initialization stage of the application. var factory = new FlyweightFactory( new Car { Company = "Chevrolet", Model = "Camaro2018", Color = "pink" }, new Car { Company = "Mercedes Benz", Model = "C300", Color = "black" }, new Car { Company = "Mercedes Benz", Model = "C500", Color = "red" }, new Car { Company = "BMW", Model = "M5", Color = "red" }, new Car { Company = "BMW", Model = "X6", Color = "white" } ); factory.listFlyweights(); addCarToPoliceDatabase(factory, new Car { Number = "CL234IR", Owner = "James Doe", Company = "BMW", Model = "M5", Color = "red" }); addCarToPoliceDatabase(factory, new Car { Number = "CL234IR", Owner = "James Doe", Company = "BMW", Model = "X1", Color = "red" }); factory.listFlyweights(); Console.WriteLine("==========================================================================="); Console.WriteLine("================================== Proxy ==============================="); MathProxy _mathProxy = new MathProxy(); Console.Write("Input num1 and num2: "); var x = Convert.ToDouble(Console.ReadLine()); var y = Convert.ToDouble(Console.ReadLine()); Console.WriteLine($"{x} + {y} = {_mathProxy.Add(x, y)}"); Console.WriteLine($"{x} - {y} = {_mathProxy.Sub(x, y)}"); Console.WriteLine($"{x} * {y} = {_mathProxy.Mul(x, y)}"); Console.WriteLine($"{x} / {y} = {_mathProxy.Div(x, y)}"); Console.WriteLine("==========================================================================="); Console.WriteLine("================================== ProxyWithBank ==============================="); Credit _credit = new Credit(); bool Income = false; _credit.Cash(400, ref Income); Income = true; Console.WriteLine($"Income {_credit.Cash(5000000.0, ref Income)} vnd"); Income = false; Console.WriteLine($"Outcome {_credit.Cash(100000.0, ref Income)} vnd"); _credit.CheckAccount(); Console.WriteLine("-------------------------------------------------------------------------------"); Console.WriteLine("----------------------------------- Transfer ----------------------------------"); Console.WriteLine("----------------------------------- Local -------------------------------------"); Income = false; _credit.LocalTransfer(6000000.0, "VND", "01231111441", "8912121231", ref Income); Income = true; Console.WriteLine($" Income local: " + $"{_credit.LocalTransfer(700000.0, "VND", "719273981723", "1125412311", ref Income)}"); _credit.CheckAccount(); Income = false; Console.WriteLine($" Outcome local: " + $"{_credit.LocalTransfer(70000.0, "VND", "719273981723", "1125412311", ref Income)}"); _credit.CheckAccount(); Console.WriteLine("----------------------------------- Overcome ----------------------------------"); Income = true; Console.WriteLine($"Income overcome: " + $"{_credit.OvercomeTransfer(500, "USD", "VND", "113311131", "719273981723", ref Income)} VND"); _credit.CheckAccount(); Income = false; Console.WriteLine($"Outcome overcome TWD: " + $"{_credit.OvercomeTransfer(5000000.0, "VND", "TWD", "719273981723", "115533315441", ref Income)} TWD"); _credit.CheckAccount(); Console.WriteLine("================================ CompositePattern ====================================="); CompositePattern.IEmployee employee_0000 = new Cashier(0, "Thu Tran", 7000000); CompositePattern.IEmployee employee_0001 = new Cashier(1, "Khoi Nguyen", 7000000); CompositePattern.IEmployee employee_0010 = new BankManager(0, "Ning Chang", 9000000); employee_0010.Add(employee_0000); employee_0010.Add(employee_0001); employee_0010.Print(); Console.WriteLine("==========================================================================="); Console.WriteLine("================================== Stragery - Ver2 ==============================="); SortedList _studentRecords = new SortedList(); _studentRecords.Add("Samual"); _studentRecords.Add("Jimmy"); _studentRecords.Add("Sandra"); _studentRecords.Add("Vivek"); _studentRecords.Add("Anna"); Console.WriteLine("------------------------------------------------------------------------------------"); _studentRecords.SetSortStrategy(new QuickSort()); _studentRecords.Sort(); Console.WriteLine("------------------------------------------------------------------------------------"); _studentRecords.SetSortStrategy(new ShellSort()); _studentRecords.Sort(); Console.WriteLine("------------------------------------------------------------------------------------"); _studentRecords.SetSortStrategy(new MergeSort()); _studentRecords.Sort(); Console.WriteLine("==========================================================================="); Console.WriteLine("================================== Decorator ==============================="); Console.WriteLine("-------------------------------------------------------------------------------"); Book _book0000 = new Book("Worley", "Inside ASP.NET", 10); _book0000.Display(); Console.WriteLine("-------------------------------------------------------------------------------"); Video _video0000 = new Video("Winifred Hervey", "Steve Harvey Show", 1, 512); _video0000.Display(); Console.WriteLine("-------------------------------------------------------------------------------"); Borrowable _borrower0000 = new Borrowable(_book0000); _borrower0000.BorrowItem("Khoi Nguyen Tan"); _borrower0000.BorrowItem("Ning Chang"); Borrowable _borrower0001 = new Borrowable(_video0000); _borrower0001.BorrowItem("Thu Tran"); _borrower0001.BorrowItem("Nguyen Lam Bao Ngoc"); _borrower0000.Display(); _borrower0001.Display(); AlertStateContext stateContext = new AlertStateContext(); stateContext.alert(); stateContext.alert(); stateContext.SetState(new Silent()); stateContext.alert(); stateContext.alert(); stateContext.alert(); Console.WriteLine("==========================================================================="); Console.WriteLine("================================== AbstractFactoryVer2 ==============================="); Console.WriteLine("-------------------------------------------------------------------------------"); ///client class AnimalWorld animalWorld = new AnimalWorld(new AmericaFactory()); animalWorld.AnimalEatOthers(); animalWorld = new AnimalWorld(new AfricaFactory()); animalWorld.AnimalEatOthers(); Console.WriteLine("==========================================================================="); Console.WriteLine("================================== Template ==============================="); Console.WriteLine("-------------------------------------------------------------------------------"); Game game = new Cricket(); game.Play(); game = new Football(); game.Play(); DataAccessObject dataAccessObject = new Categories(); dataAccessObject.Run(); dataAccessObject = new Products(); dataAccessObject.Run(); Console.WriteLine("==========================================================================="); Console.WriteLine("================================== Adapter ==============================="); Console.WriteLine("-------------------------------------------------------------------------------"); var xmlConverter = new XmlConverter(); var adapter = new XmlToJsonAdapter(xmlConverter); adapter.ConvertXMLToJson(); Console.WriteLine("==========================================================================="); Console.WriteLine("================================== Template Ver 3 ==============================="); Console.WriteLine("-------------------------------------------------------------------------------"); DAO @object = new Person(); @object.Connect(); @object.GetAll(); @object.Process(); @object.Disconnect(); Console.WriteLine("==========================================================================="); Console.WriteLine("================================== ChainOfReposibility ==============================="); Console.WriteLine("-------------------------------------------------------------------------------"); // Setup Chain of Responsibility Approver larry = new Director(); Approver sam = new VicePresident(); Approver tammy = new President(); larry.SetSuccessor(sam); sam.SetSuccessor(tammy); // Generate and process purchase requests Purchase p = new Purchase(2034, 350.00, "Assets"); larry.ProcessRequest(p); p = new Purchase(2035, 32590.10, "Project X"); larry.ProcessRequest(p); p = new Purchase(2036, 122100.00, "Project Y"); larry.ProcessRequest(p); }
public void ProxyMultiplyTest() { double result = proxy.Mul(6, 2); Assert.AreEqual(12, result); }
static void Main(string[] args) { #region 简单工厂模式 Console.WriteLine("===========简单工厂模式============"); //Practical01:运算操作,计算时,不依赖具体的运算类,通过OperationFactory获取真正的运算类 Product_Operation operation01 = Factory_OperationFactory.CreateOperate(OPE.PLUS); operation01._NumA = 10; operation01._NumB = 5; Console.WriteLine(operation01.GetResult()); Product_Operation operation02 = Factory_OperationFactory.CreateOperate(OPE.DIVIDE); operation02._NumA = 10; operation02._NumB = 5; Console.WriteLine(operation02.GetResult()); //Parctical01:银行支付 var payment = PaymentFactory.CreatePayment("ABC"); Console.WriteLine(payment.Payfor(1)); #endregion #region 抽象工厂模式 Console.WriteLine("===========抽象工厂模式============"); //便宜套餐 Factory_Abstract_IKFCFactory Cheap_Abstract = new Factory_CheapPackage(); KFCFood Cheap_food = Cheap_Abstract.CreateFood(); Cheap_food.Display(); KFCDrink Cheap_Drink = Cheap_Abstract.CreateDrink(); Cheap_Drink.Display(); //豪华套餐 Factory_Abstract_IKFCFactory Luxury_Abstract = new Factory_LuxuryPackage(); KFCFood Luxury_food = Luxury_Abstract.CreateFood(); Luxury_food.Display(); KFCDrink Luxury_Drink = Luxury_Abstract.CreateDrink(); Luxury_Drink.Display(); #endregion #region 建造者模式 Console.WriteLine("===========建造者模式============"); _02Builder_VehicleBuilder builder; _04Director_Shop shop = new _04Director_Shop(); //产品1:Scooter builder = new _03ConcreteBuilder_ScooterBuilder(); shop.Construct(builder); builder.Vehicle.Show(); //产品2: builder = new _03ConcreteBuilder_CarBuilder(); shop.Construct(builder); builder.Vehicle.Show(); #endregion #region 工厂方法模式 Console.WriteLine("===========工厂方法模式============"); _01Factory_IKFC IKFCFactory = new _01Factory_IKFC_ChickenFactory(); //生产鸡腿 _02KFCFood f_1 = IKFCFactory.CreateFood(); f_1.Display(); //+1 _02KFCFood f_2 = IKFCFactory.CreateFood(); f_2.Display(); _02KFCFood f_3 = IKFCFactory.CreateFood(); f_3.Display(); #endregion #region 原型模式 Console.WriteLine("===========原型模式============"); _03ColorManager colormanager = new _03ColorManager(); colormanager["red"] = new _02Color(255, 0, 0); // 个性化对象 colormanager["peace"] = new _02Color(128, 211, 128); //浅clone _02Color color1 = colormanager["red"].Clone() as _02Color; _02Color color2 = colormanager["peace"].Clone() as _02Color; #endregion #region 单例模式 Console.WriteLine("===========单例模式============"); //单线程环境 Singleton01 s1 = Singleton01.Instance(); Singleton01 s2 = Singleton01.Instance(); if (s1 == s2) { Console.WriteLine("s1 == s2,单例模式"); } #endregion #region 适配器模式 Console.WriteLine("===========适配器模式============"); Console.WriteLine("手机:"); _01ITarget t = new Adapter(new _02Power()); t.GetPower(); #endregion #region 观察者模式 Console.WriteLine("===========观察者模式============"); ConcreteSubject concreteSubject = new ConcreteSubject(); concreteSubject.Attach(new ConcreteObserver(concreteSubject, "X")); concreteSubject.Attach(new ConcreteObserver(concreteSubject, "Y")); concreteSubject.Attach(new ConcreteObserver(concreteSubject, "Z")); //Subject通过Attach()和Detach()方法添加或删除其所关联的观察者, //并通过Notify进行更新,让每个观察者都可以观察到最新的状态 concreteSubject.SubjectState = "ABC"; concreteSubject.Notify(); #endregion #region 桥接模式 Console.WriteLine("===========桥接模式============"); //首先初始化 _01MakeCoffee 抽象类 //白牛奶 _01MakeCoffeeSingleton whiteCoffeeSingleton = new _01MakeCoffeeSingleton(new _01MakeCoffee_WhiteCoffee()); //中杯 _02Coffee_MediumCupCoffee mediumWhiteCoffee = new _02Coffee_MediumCupCoffee(); mediumWhiteCoffee.Make(); //大杯 _02Coffee_LargeCupCoffee largeCupWhiteCoffee = new _02Coffee_LargeCupCoffee(); largeCupWhiteCoffee.Make(); //黑牛奶 _01MakeCoffeeSingleton blackCoffeeSingleton = new _01MakeCoffeeSingleton(new _01MakeCoffee_BlackCoffee()); // 中杯 _02Coffee_MediumCupCoffee mediumBlackCoffee = new _02Coffee_MediumCupCoffee(); mediumBlackCoffee.Make(); // 大杯 _02Coffee_LargeCupCoffee largeCupBlackCoffee = new _02Coffee_LargeCupCoffee(); largeCupBlackCoffee.Make(); #endregion #region 组合模式 Console.WriteLine("===========组合模式============"); Graphics graphics = new Graphics("全部图形"); _01Sharp_Circle circle = new _01Sharp_Circle("圆形", 5); graphics.Add(circle); _01Sharp_Rectangle rectangle = new _01Sharp_Rectangle("矩形", 4, 5); graphics.Add(rectangle); _01Sharp_Triangle triangle = new _01Sharp_Triangle("三角形", 3, 4, 5); graphics.Add(triangle); graphics.Display(); #endregion #region 外观模式 Console.WriteLine("===========外观模式============"); Facade facade = new Facade(); facade.MethodA(); facade.MethodB(); #endregion #region 享元模式 Console.WriteLine("===========享元模式============"); int extrinsicstate = 22; FlyweightFactory factory = new FlyweightFactory(); //获取不同的Flyweigh实例 _01Flyweight fx = factory.GetFlyweight("X"); fx.Operation(--extrinsicstate); _01Flyweight fy = factory.GetFlyweight("Y"); fy.Operation(--extrinsicstate); _01Flyweight fz = factory.GetFlyweight("Z"); fz.Operation(--extrinsicstate); _01FlyweightUnshared fu = new _01FlyweightUnshared(); fu.Operation(--extrinsicstate); #endregion #region 代理模式 Console.WriteLine("===========代理模式============"); //创建代理 MathProxy proxy = new MathProxy(); // Do the math Console.WriteLine("4 + 2 = " + proxy.Add(4, 2)); Console.WriteLine("4 - 2 = " + proxy.Sub(4, 2)); Console.WriteLine("4 * 2 = " + proxy.Mul(4, 2)); Console.WriteLine("4 / 2 = " + proxy.Div(4, 2)); #endregion #region 职责链模式 Console.WriteLine("===========职责链模式============"); // 创建职责链 _01Handler h1 = new ConcreteHandler1(); _01Handler h2 = new ConcreteHandler2(); _01Handler h3 = new ConcreteHandler3(); //successor 继承 自Handler,执行 else if 条件中的successor.HandleRequest(request); h1.SetSuccessor(h2); h2.SetSuccessor(h3); int[] requests = { 2, 5, 14, 22, 18, 3, 27, 20 }; foreach (int request in requests) { //else if 条件中的successor.HandleRequest(request); //h1中SetSuccessor(h2),h2中SetSuccessor(h3) //ConcreteHandler1负责处理的请求范围0~10, //ConcreteHandler2负责处理的请求范围10~20, //ConcreteHandler3负责处理的请求范围20~30。 //当请求ConcreteHandler1处理不了,则让ConcreteHandler2处理, //如果ConcreteHandler2处理不了,则让ConcreteHandler3处理。 //依次类推,Client的请求会验证职责链传递下去,直至请求被处理, //而Client不要关心到底是谁处理了请求。 h1.HandleRequest(request); } #endregion #region 命令模式 Console.WriteLine("===========命令模式============"); _00Receiver receiver = new _00Receiver(); //调用invoker调用Receiver的操作,实现Execute方法 _01Command command = new _01CommandConcrete(receiver); //命令的接收者,将命令请求传递给相应的命令对象 Invoker _invoker = new Invoker(command); _invoker.ExcuteCommand(); #endregion Console.Read(); }
private static void Main() { const DesignPatterns designPatterns = DesignPatterns.装饰模式; switch (designPatterns) { case DesignPatterns.单例模式: Singleton singleton = Singleton.GetInstance(); Console.WriteLine(singleton.Say()); break; case DesignPatterns.工厂模式: //简单工厂 BookFactory bookFactory = new BookFactory(); IBook chineseBook1 = bookFactory.CreateBook("语文"); IBook mathBook1 = bookFactory.CreateBook("数学"); chineseBook1.Info(); mathBook1.Info(); //工厂方法 ChineseBookFactory chineseBookFactory = new ChineseBookFactory(); MathBookFactory mathBookFactory = new MathBookFactory(); IBook chineseBook2 = chineseBookFactory.CreateBook(); IBook mathBook2 = mathBookFactory.CreateBook(); chineseBook2.Info(); mathBook2.Info(); //抽象工厂 FirstGradeBookFactory firstGradeBookFactory = new FirstGradeBookFactory(); SecondGradeFactory secondGradeFactory = new SecondGradeFactory(); IBook chineseBook3 = firstGradeBookFactory.CreateChineseBook(); IBook mathBook3 = firstGradeBookFactory.CreateMathBook(); chineseBook3.Info(); mathBook3.Info(); IBook chineseBook4 = secondGradeFactory.CreateChineseBook(); IBook mathBook4 = secondGradeFactory.CreateMathBook(); chineseBook4.Info(); mathBook4.Info(); break; case DesignPatterns.装饰模式: Zhangsan zhangsan = new Zhangsan(); ZhangsanSayA zhangsanSayA = new ZhangsanSayA(); ZhangsanSayB zhangsanSayB = new ZhangsanSayB(); zhangsanSayA.Tell(zhangsan); zhangsanSayB.Tell(zhangsanSayA); zhangsanSayB.Say(); break; case DesignPatterns.外观模式: Lisi lisi = new Lisi(); lisi.OneDay(); break; case DesignPatterns.代理模式: MathProxy proxy = new MathProxy(); Console.WriteLine("8 + 2 = " + proxy.Add(8, 2)); Console.WriteLine("8 - 2 = " + proxy.Sub(8, 2)); Console.WriteLine("8 * 2 = " + proxy.Mul(8, 2)); Console.WriteLine("8 / 2 = " + proxy.Div(8, 2)); break; case DesignPatterns.观察者模式: //被观察者 Hero hero = new Hero(); //添加观察者 hero.AttachObserver(new Monster()); hero.AttachObserver(new Trap()); hero.AttachObserver(new Treasure()); //通知观察者 hero.Move(); break; } }