Beispiel #1
0
        public Main()
        {
            //create the subject
            var s1 = new ConcreteSubject();

            //version 1 -
            //create the observer
            //the data is passed during notification.
            var o3 = new ConcreteObserver();
            var o4 = new ConcreteObserver();

            //version 2 -
            //create the observer and pass the subject
            //to pull the requiered data after a change.
            var o1 = new ConcreteObserver(s1);
            var o2 = new ConcreteObserver(s1);

            //Attach observers , only version 1
            s1.Add(o3);
            s1.Add(o4);

            //Perform a change of state.
            s1.ID = 1;
            s1.ID = 3;
        }
        static void Main(string[] args)
        {
            var       s = new Subject();
            IObserver a = new ConcreteObserver("Observer A");
            IObserver b = new ConcreteObserver("Observer B");
            IObserver c = new ConcreteObserver("Observer C");

            s.RegisterObserver(a);
            s.RegisterObserver(b);
            s.RegisterObserver(c);

            Console.WriteLine("Registered 3 observer...");
            Console.WriteLine("Notify all observer:");
            s.NotifyObservers("Hello observers!");

            Console.WriteLine();

            s.UnregisterObserver(b);

            Console.WriteLine("Removed observer B...");
            s.NotifyObservers("Hello observers!");

            Console.WriteLine();
            Console.ReadKey();
        }
        public void Send2Signals_WithSomeClient_MustBeUpdateAtSecondSignal()
        {
            var testSubject = new ConcreteSubject()
            {
                SubjectState = "signal1"
            };
            var observer1 = new ConcreteObserver(testSubject, "observer1");
            var observer2 = new ConcreteObserver(testSubject, "observer2");
            var observer3 = new ConcreteObserver(testSubject, "observer3");

            testSubject.Attach(observer1);
            testSubject.Attach(observer2);
            testSubject.Attach(observer3);

            testSubject.Notify();
            Assert.Equal("signal1", observer1.GetState());
            Assert.Equal("signal1", observer2.GetState());
            Assert.Equal("signal1", observer2.GetState());

            testSubject.SubjectState = "signal2";
            testSubject.Notify();

            Assert.Equal("signal2", observer1.GetState());
            Assert.Equal("signal2", observer2.GetState());
            Assert.Equal("signal2", observer2.GetState());
        }
Beispiel #4
0
    static void Main()
    {
        IObserver observer = new ConcreteObserver();
        Subject   subject  = new Subject();

        subject.Regist(observer);
        subject.Notify();
    }
Beispiel #5
0
        static void Main()
        {
            ConcreteSubject subject = new ConcreteSubject();

            IObserver observer = new ConcreteObserver(subject);

            subject.ChangeSubjectValue(50);
        }
        public void ObserverTest1()
        {
            ConcreteSubject  subject   = new ConcreteSubject();
            ConcreteObserver observer1 = new ConcreteObserver();

            subject.Attach(observer1);
            Assert.True(observer1.Notified == 0);
        }
Beispiel #7
0
        void Start()
        {
            var subject  = new  ConcreteSubject();
            var observer = new ConcreteObserver(subject);

            subject.Attach(observer);

            subject.SetState("测试");
        }
Beispiel #8
0
    // Use this for initialization
    void Start()
    {
        ConcreteSubject subject  = new ConcreteSubject();
        Observer        observer = new ConcreteObserver();

        subject.AddObserver(observer);
        subject.State = "下雨";
        subject.State = "下雪";
    }
        static void Main(string[] args)
        {
            ConcreteSubject subject  = new ConcreteSubject();
            Observer        observer = new ConcreteObserver("张三", subject);

            subject.Attach(observer);
            subject.SubjectState = "老板回来了";
            subject.Notify();
        }
        public void SimpleTest()
        {
            ConcreteSubject  subject   = new ConcreteSubject();
            ConcreteObserver observer1 = new ConcreteObserver(subject);
            ConcreteObserver observer2 = new ConcreteObserver(subject);
            ConcreteObserver observer3 = new ConcreteObserver(subject);

            subject.Action();
        }
Beispiel #11
0
        public void ObserverDemo()
        {
            var subject = new ConcreteSubject();
            var o       = new ConcreteObserver();
            var o2      = new ConcreteObserver2();

            subject.Attach(o);
            subject.Attach(o2);
            subject.DoSomething();
        }
Beispiel #12
0
        public void GivenAnyObservableBusiness_WhenDoBusinessStuff_ThenObserverGetNotified()
        {
            // Arrange
            var observableBusiness = new BusinessClassObservable();
            var observer           = new ConcreteObserver("Observer");

            // Act
            observableBusiness.DoBusinessStuff();

            // Assert
            observableBusiness.ObservableState.Should().Be(observer.ObservableState);
        }
Beispiel #13
0
        public void observerColor()
        {
            ConcreteSubject subject = new ConcreteSubject();

            subject.brush = Brushes.Red;
            Ellipse          testEll1 = new Ellipse();
            ConcreteObserver ob1      = new ConcreteObserver(subject, testEll1);

            subject.Attach(ob1);
            subject.Notify();
            Assert.AreEqual(testEll1.Fill, Brushes.Red);
        }
Beispiel #14
0
        public void Initialize()
        {
            cs = new ConcreteSubject();

            co1 = new ConcreteObserver(cs);
            co2 = new ConcreteObserver(cs);
            co3 = new ConcreteObserver(cs);

            cs.Attach(co1);
            cs.Attach(co2);
            cs.Attach(co3);
        }
        public void ObserverTest3()
        {
            ConcreteSubject  subject   = new ConcreteSubject();
            ConcreteObserver observer1 = new ConcreteObserver();
            ConcreteObserver observer2 = new ConcreteObserver();

            subject.Attach(observer1);
            subject.Notify();
            subject.Attach(observer2);
            subject.Notify();
            Assert.True((observer1.Notified == 2) && (observer2.Notified == 1));
        }
Beispiel #16
0
        public void subjectCount()
        {
            ConcreteSubject  subject  = new ConcreteSubject();
            Ellipse          testEll1 = new Ellipse();
            ConcreteObserver ob1      = new ConcreteObserver(subject, testEll1);
            Ellipse          testEll2 = new Ellipse();
            ConcreteObserver ob2      = new ConcreteObserver(subject, testEll2);

            subject.Attach(ob1);
            subject.Attach(ob2);
            Assert.AreEqual(subject.observers.Count, 2);
        }
        public void Observer_Pattern_Test()
        {
            var subject  = new Subject();
            var observer = new ConcreteObserver();

            subject.Attach(observer);

            Assert.IsTrue(observer.IsActive);

            subject.ChangeStates();

            Assert.IsFalse(observer.IsActive);
        }
        public void ObserverTest4()
        {
            ConcreteSubject  subject   = new ConcreteSubject();
            ConcreteObserver observer1 = new ConcreteObserver();
            ConcreteObserver observer2 = new ConcreteObserver();

            subject.Attach(observer1);
            subject.Notify(subject);
            subject.Attach(observer2);
            subject.Notify(subject);
            subject.Detach(observer1);
            subject.Notify(subject);
            Assert.True(observer1.Notified == observer2.Notified);
        }
Beispiel #19
0
        private static void Main()
        {
            var subject   = new ConcreteSubject();
            var observer1 = new ConcreteObserver("observer1");
            var observer2 = new ConcreteObserver("observer2");

            subject.Attach(observer1);
            subject.Attach(observer2);
            subject.SubjectState = "Modified";
            subject.Detach(observer1);
            subject.Detach(observer2);
            subject.SubjectState = "Modified Again !";
            Console.ReadKey();
        }
Beispiel #20
0
        static void Main(string[] args)
        {
            Engine   engine    = new Engine();
            Consumer consumer  = new Consumer("consumer1", engine);
            Consumer consumer2 = new Consumer("consumer2", engine);

            engine.SwitchGear();
            consumer.Unsubscribe();
            engine.SwitchGear();

            Console.WriteLine("");
            Console.WriteLine("============ Structural patterns (realize relationships between entities) ============");
            Console.WriteLine("~~~~~~~~~~~~~ Facade (A single class that represents an entire subsystem) ~~~~~~~~~~~~~");
            Structural.Facade facade = new Structural.Facade();
            facade.AddMethod();
            Console.WriteLine("~~~~~~~~~~~~~ Decorator (Attach additional responsibilities to an object dynamically) ~~~~~~~~~~~~~");
            ConcreteDecorator decorator         = new ConcreteDecorator();
            ConcreteComponent concreteComponent = new ConcreteComponent();

            decorator.SetComponent(concreteComponent);
            decorator.Operation();

            Console.WriteLine("");
            Console.WriteLine("============ Behavioral patterns (communications between entities) ============");
            Console.WriteLine("~~~~~~~~~~~~~ Observer (when one object changes state, all its dependents are notified and updated automatically) ~~~~~~~~~~~~~");

            ConcreteSubject  subject  = new ConcreteSubject();
            ConcreteObserver observer = new ConcreteObserver(subject, "X");

            subject.Attach(observer);
            // Change subject and notify observers
            subject.State = "ABC";
            subject.Notify();
            Console.WriteLine("~~~~~~~~~~~~~ Strategy (Define a family of algorithms, encapsulate each one, and make them interchangeable) ~~~~~~~~~~~~~");
            Context context = new Context(new SortStrategy1());

            context.ContextSortInterface();
            context = new Context(new SortStrategy2());
            context.ContextSortInterface();

            Console.WriteLine("============ Structural patterns ============");
            Console.WriteLine("~~~~~~~~~~~~~ Singleton (Ensure a class has only one instance and provide a global point of access to it) ~~~~~~~~~~~~~");
            Cache instance1 = Cache.Instance();
            Cache instance2 = Cache.Instance();

            Console.WriteLine("instance1 == instance2? {0}", instance1 == instance2);
            Console.WriteLine("~~~~~~~~~~~~~ FactoryMethod ~~~~~~~~~~~~~");
            IComponent component = Creator.Create("first");
        }
Beispiel #21
0
        //LD_OBSERVER_000
        public static void RunObserverBehavioralPattern()
        {
            //one subject and two observers
            ISubject <string> subject = new ConcreteSubject <string>();

            ObserverBehavioralPattern.IObserver <string> observer1 = new ConcreteObserver <string>("observer1");
            ObserverBehavioralPattern.IObserver <string> observer2 = new ConcreteObserver <string>("observer2");

            //register the observers to the subject
            subject.Attach(observer1);
            subject.Attach(observer2);

            //a change to the subject automatically notifies all the observers
            subject.SetState("stateX");
        }
Beispiel #22
0
        public void TestMethod1()
        {
            var subject   = new ConcreteSubject();
            var observer1 = new ConcreteObserver(subject);
            var observer2 = new ConcreteObserver(subject);

            subject.Attach(observer1);
            subject.Attach(observer2);

            subject.State = "NEW";

            subject.Notify();

            Assert.AreEqual(subject.State, observer1.State);
            Assert.AreEqual(subject.State, observer2.State);
        }
Beispiel #23
0
            public static void Observer()
            {
                ConcreteSubject cs = new ConcreteSubject();

                ConcreteObserver co1 = new ConcreteObserver("Observer 1");
                ConcreteObserver co2 = new ConcreteObserver("Observer 2");
                ConcreteObserver co3 = new ConcreteObserver("Observer 3");

                cs.Add(co1);
                cs.Add(co2);
                cs.Add(co3);

                cs.Notify();

                Console.Read();
            }
        public void Run()
        {
            ConcreteSubject subject   = new ConcreteSubject();
            Observer        observer1 = new ConcreteObserver(subject, "X");
            Observer        observer2 = new ConcreteObserver(subject, "Y");
            Observer        observer3 = new ConcreteObserver(subject, "Z");

            subject.RegisterObservers(observer1, observer2, observer3);

            // Change subject and notify observers
            subject.SubjectState = "ABC";
            subject.UnRegisterObservers(observer1, observer3);
            subject.SubjectState = "XYZ";

            Console.WriteLine("\nImplementation using .NET IObserver and IObservable");
            DotNetImplementation.NetObserver.Run();
        }
Beispiel #25
0
        public void Start()
        {
            var subject = new ConcreteSubject();

            var firstConcreteObserver  = new ConcreteObserver(subject, "First");
            var secondConcreteObserver = new ConcreteObserver(subject, "Second");

            subject.Attach(firstConcreteObserver);
            subject.Attach(secondConcreteObserver);

            subject.SubjectState = "FirstState";
            subject.Notify();

            subject.Detach(secondConcreteObserver);

            subject.SubjectState = "SecondState";
            subject.Notify();
        }
Beispiel #26
0
        private static void Main()
        {
            using (var subject = new ConcreteSubject())
            {
                var observer1 = new ConcreteObserver("observer1");
                var observer2 = new ConcreteObserver("observer2");

                using (subject.Subscribe(observer1))
                    using (subject.Subscribe(observer2))
                    {
                        subject.SubjectState = "Modified";
                    }

                subject.SubjectState = "Modified Again !";
            }

            Console.ReadKey();
        }
Beispiel #27
0
        public ObserverPattern()
        {
            ConcreteSubject subject = new ConcreteSubject();

            ConcreteObserver observer1 = new ConcreteObserver("Rome", subject);
            ConcreteObserver observer2 = new ConcreteObserver("Paris", subject);
            ConcreteObserver observer3 = new ConcreteObserver("London", subject);

            subject.Attach(observer1);
            subject.Attach(observer2);
            subject.Attach(observer3);

            for (int i = 0; i < 10; i++)
            {
                subject.ChangeState($"Status #{i}");
                subject.Notify();
                Thread.Sleep(500);
            }
        }
Beispiel #28
0
        static void Main(string[] args)
        {
            var concreteSubject = new ConcreteSubject();
            var observer1       = new ConcreteObserver("Observer 1");
            var observer2       = new ConcreteObserver("Observer 2");

            concreteSubject.ConcreteSubjectState = 2;

            concreteSubject.Attach(observer1);
            observer1.Update(concreteSubject);

            concreteSubject.Attach(observer2);
            observer2.Update(concreteSubject);

            concreteSubject.ConcreteSubjectState = 3;

            concreteSubject.Detach(observer1);

            concreteSubject.ConcreteSubjectState = 4;
        }
Beispiel #29
0
        static void Main(string[] args)
        {
            //Create a Product with Out Of Stock Status
            ConcreteSubject RedMI = new ConcreteSubject("Red MI Mobile", 10000, "Out Of Stock");

            //User Anurag will be created and user1 object will be registered to the subject
            ConcreteObserver user1 = new ConcreteObserver("Anurag", RedMI);

            //User Pranaya will be created and user1 object will be registered to the subject
            ConcreteObserver user2 = new ConcreteObserver("Pranaya", RedMI);

            //User Priyanka will be created and user3 object will be registered to the subject
            ConcreteObserver user3 = new ConcreteObserver("Priyanka", RedMI);

            Console.WriteLine("Red MI Mobile current state : " + RedMI.GetAvailability());
            Console.WriteLine();

            // Now product is available
            RedMI.SetAvailability("Available");
            Console.Read();
        }
Beispiel #30
0
 public void destroyConcreteObserver(ConcreteObserver o)
 {
     activeConcreteObserver.Remove(o);
 }