.


:




:

































 

 

 

 


Interpreter( ) , .




, . , , . "" , "" "" (), "" (). "" . "" . "" , . "" , .

namespace Interpreter_DesignPattern { using System; using System.Collections; class Context { } abstract class AbstractExpression { abstract public void Interpret(Context c); } // , class TerminalExpression: AbstractExpression { override public void Interpret(Context c) { } } // , class NonterminalExpression: AbstractExpression { override public void Interpret(Context c) { } } public class Client { public static int Main(string[] args) { Context c = new Context(); ArrayList l = new ArrayList(); // l.Add(new TerminalExpression()); l.Add(new NonterminalExpression()); // interpret foreach (AbstractExpression exp in l) { exp.Interpret(c); } return 0; } } }

Mediator( ) , .

namespace Mediator_DesignPattern { using System; class Mediator { private DataProviderColleague dataProvider; private DataConsumerColleague dataConsumer; public void IntroduceColleagues(DataProviderColleague c1, DataConsumerColleague c2) { dataProvider = c1; dataConsumer = c2; } public void DataChanged() { int i = dataProvider.MyData; dataConsumer.NewValue(i); } } class DataConsumerColleague { public void NewValue(int i) { Console.WriteLine("New value {0}", i); } } class DataProviderColleague { private Mediator mediator; private int iMyData=0; public int MyData { get { return iMyData; } set { iMyData = value; } } public DataProviderColleague(Mediator m) { mediator = m; } public void ChangeData() { iMyData = 403; if (mediator!= null) mediator.DataChanged(); } } public class Client { public static int Main(string[] args) { Mediator m = new Mediator(); DataProviderColleague c1 = new DataProviderColleague(m); DataConsumerColleague c2 = new DataConsumerColleague(); m.IntroduceColleagues(c1,c2); c1.ChangeData(); return 0; } } }

4.4 , Observer . (Dependents), - (Publisher-Subscriber).

, .

, :

  • , , ,
  • , .

, , .

namespace Observer_DesignPattern { using System; using System.Collections; class Subject { private ArrayList list = new ArrayList(); private string strImportantSubjectData = "Initial"; public string ImportantSubjectData { get { return strImportantSubjectData; } set { strImportantSubjectData = value; } } public void Attach(Observer o) { list.Add(o); o.ObservedSubject = this; } public void Detach(Observer o) { } public void Notify() { foreach (Observer o in list) { o.Update(); } } } class ConcreteSubject: Subject { public void GetState() { } public void SetState() { } } abstract class Observer { protected Subject s; public Subject ObservedSubject { get { return s; } set { s = value; } } abstract public void Update(); } class ConcreteObserver: Observer { private string observerName; public ConcreteObserver(string name) { observerName = name; } override public void Update() { Console.WriteLine("In Observer {0}: data from subject = {1}", observerName, s.ImportantSubjectData); } } public class Client { public static int Main(string[] args) { ConcreteSubject s = new ConcreteSubject(); ConcreteObserver o1 = new ConcreteObserver("first observer"); ConcreteObserver o2 = new ConcreteObserver("second observer"); s.Attach(o1); s.Attach(o2); s. ImportantSubjectData = "This is important subject data"; s.Notify(); return 0; } } }

4.5 (State) . , .

namespace State_DesignPattern { using System; abstract class State { protected string strStatename; abstract public void Pour(); } class OpenedState: State { public OpenedState () { strStatename = "Opened"; } override public void Pour() { Console.WriteLine("...pouring..."); Console.WriteLine("...pouring..."); Console.WriteLine("...pouring..."); } } class ClosedState: State { public ClosedState() { strStatename = "Closed"; } override public void Pour() { Console.WriteLine("ERROR - bottle is closed - cannot pour"); } } class ContextColaBottle { public enum BottleStateSetting { Closed, Opened }; OpenedState openedState = new OpenedState(); ClosedState closedState = new ClosedState(); public ContextColaBottle () { // Initialize to closed CurrentState = closedState; } private State CurrentState; public void SetState(BottleStateSetting newState) { if (newState == BottleStateSetting.Closed) { CurrentState = closedState; } else { CurrentState = openedState; } } public void Pour() { CurrentState.Pour(); } } public class Client { public static int Main(string[] args) { ContextColaBottle contextColaBottle = new ContextColaBottle(); Console.WriteLine("initial state is closed"); Console.WriteLine("Now trying to pour"); contextColaBottle.Pour(); Console.WriteLine("Open bottle"); contextColaBottle.SetState(ContextColaBottle.BottleStateSetting.Opened); Console.WriteLine("Try to pour again"); contextColaBottle.Pour(); return 0; } } }

4.6

, Strategy , , . . Strategy -, .

, , . , , .

  • - ,

. .

1

using System; namespace DesignPatterns.Behavioral.Strategy{ /// <summary> /// ( /// <see cref="Algorithm">Algorithm</see>), /// . , /// , , /// , Ҩ . /// </summary> public interface IStrategy { void Algorithm(); } /// <summary> /// -. /// </summary> public class ConcreteStrategy1: IStrategy { public void Algorithm() { Console.WriteLine(" 1."); } } /// <summary> /// -. /// . /// </summary> public class ConcreteStrategy2: IStrategy { public void Algorithm() { Console.WriteLine(" 2."); } } /// <summary> /// , . /// </summary> public class Context { /// <summary> /// <see cref="IStrategy">IStrategy</see> /// /// ( , ). /// </summary> private IStrategy _strategy; /// <summary> /// . /// . /// </summary> /// <param name="strategy"> /// . /// </param> public Context(IStrategy strategy) { _strategy = strategy; } /// <summary> /// . /// . /// C# . /// </summary> /// <param name="strategy"> /// . /// </param> public void SetStrategy(IStrategy strategy) { _strategy = strategy; } /// <summary> /// , /// . /// </summary> public void ExecuteOperation() { _strategy.Algorithm(); } } /// <summary> /// . /// . /// </summary> public static class Program { /// <summary> /// . /// </summary> public static void Main() { // . Context context = new Context(new ConcreteStrategy1()); // , . context.ExecuteOperation(); // . context.SetStrategy(new ConcreteStrategy2()); // , . context.ExecuteOperation(); } }}

2

namespace Strategy_DesignPattern { using System; abstract class Strategy { abstract public void DoAlgorithm(); } class FirstStrategy: Strategy { override public void DoAlgorithm() { Console.WriteLine("In first strategy"); } } class SecondStrategy: Strategy { override public void DoAlgorithm() { Console.WriteLine("In second strategy"); } } class Context { Strategy s; public Context(Strategy strat) { s = strat; } public void DoWork() { } public void DoStrategyWork() { s.DoAlgorithm(); } } public class Client { public static int Main(string[] args) { FirstStrategy firstStrategy = new FirstStrategy(); Context c = new Context(firstStrategy); c.DoWork(); c.DoStrategyWork(); return 0; } } }




:


: 2016-11-18; !; : 591 |


:

:

- , , .
==> ...

1744 - | 1523 -


© 2015-2024 lektsii.org - -

: 0.013 .