The 'ConcreteSubject' class
Inheritance: Subject
示例#1
0
        static void Main(string[] args)
        {
            #region 基本用法(Basic.cs)
            ConcreteSubject s = new ConcreteSubject();

            s.Attach(new ConcreteObserver(s, "X"));
            s.Attach(new ConcreteObserver(s, "Y"));
            s.Attach(new ConcreteObserver(s, "Z"));

            s.SubjectState = "ABC";
            s.Notify();
            #endregion

            #region 具体实例(Example.cs)
            //相比于基本用法,这个实例:
            //①进一步将通知者和观察者分离,运用依赖倒转原则,在客户端中将观察者动作委托给通知者,进一步降低了耦合
            //②观察者实例无需继承观察者接口

            Boss huhanshan = new Boss();

            StockObserver tongshi1 = new StockObserver("魏关姹", huhanshan);
            NBAOberver tongshi2 = new NBAOberver("易管查", huhanshan);

            huhanshan.Update += new EventHandler(tongshi1.CloseStockMarket);
            huhanshan.Update += new EventHandler(tongshi2.CloseNBADirectSeeding);

            huhanshan.SubjectState = "我胡汉三回来了";
            huhanshan.Notify();

            Console.Read();
            #endregion
        }
        static void Main(string[] args)
        {
            ConcreteSubject concreteSubject = new ConcreteSubject();

            concreteSubject.Attach(new ConcreteObserver(concreteSubject, "Observer A"));
            concreteSubject.Attach(new ConcreteObserver(concreteSubject, "Observer B"));
            concreteSubject.Attach(new ConcreteObserver(concreteSubject, "Observer C"));

            concreteSubject.State = "Loading...";
            concreteSubject.Notify();

            Console.Read();
        }
示例#3
0
文件: Program.cs 项目: Alex-LG/DP
        static void Main()
        {
            ConcreteSubject s = new ConcreteSubject();

            s.Attach(new ConcreteObserver(s, "X"));
            s.Attach(new ConcreteObserver(s, "Y"));
            s.Attach(new ConcreteObserver(s, "Z"));


            s.SubjectState = "ABC";
            s.Notify();

            Console.ReadKey();
        }
示例#4
0
		static void Main(string[] args) {
			var subject = new ConcreteSubject();

			subject.Attach(new ConcreteObserver(subject));
			subject.Attach(new ConcreteObserver(subject));

			subject.State = "State1";
			subject.Notify();

			subject.State = "State2";
			subject.Notify();

			Console.ReadKey();
		}
        /// <summary>
        /// The test third.
        /// </summary>
        private static void TestThird()
        {
            // Configure Observer pattern
            ConcreteSubject subject = new ConcreteSubject();

            subject.Attach(new ConcreteObserver(subject, "X"));
            subject.Attach(new ConcreteObserver(subject, "Y"));
            subject.Attach(new ConcreteObserver(subject, "Z"));

            // Change subject and notify observers
            subject.SubjectState = "ABC";
            subject.Notify();

            // Wait for user
            Console.ReadKey();
        }
示例#6
0
        /// <summary>
        /// Entry point into console application.
        /// </summary>
        static void Main()
        {
            // Configure Observer pattern
            ConcreteSubject s = new ConcreteSubject();

            s.Attach(new ConcreteObserver(s, "X"));
            s.Attach(new ConcreteObserver(s, "Y"));
            s.Attach(new ConcreteObserver(s, "Z"));

            // Change subject and notify observers
            s.SubjectState = "ABC";
            s.Notify();

            // Wait for user
            Console.ReadKey();
        }
示例#7
0
        private static void Main()
        {
            var concreteSubject = new ConcreteSubject();

            concreteSubject.Attach(new ConcreteObserver(concreteSubject, "ConcreteObserverA"));

            concreteSubject.Attach(new ConcreteObserver(concreteSubject, "ConcreteObserverB"));

            concreteSubject.Attach(new ConcreteObserver(concreteSubject, "ConcreteObserverC"));

            concreteSubject.SubjectState = "State";

            concreteSubject.Notify();

            Console.ReadKey();
        }
示例#8
0
        private static void Main(string[] args)
        {
            // canonical example

            var subject = new ConcreteSubject();

            var observer1 = new ConcreteObserver(1);
            var observer2 = new ConcreteObserver(2);

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

            subject.SetState(new List <string>());
            subject.UpdateStatePartially("yoyo");
            subject.UpdateStatePartially("ahahha");
        }
        static void Main(string[] args)
        {
            //// 櫃台小姐童子婕
            //Secretary secretary = new Secretary();

            //// 看股票的同事
            //StockObserver colleague1 = new StockObserver("同事1", secretary);
            //NBAObserver colleague2 = new NBAObserver("同事2", secretary);

            //// 櫃台記下了兩位同事
            //secretary.Attach(colleague1);
            //secretary.Attach(colleague2);

            //// 發現老闆回來
            //secretary.SubjectState = "老闆回來囉!";

            //// 通知兩個同事
            //secretary.Notify();

            // 老闆胡漢三
            Boss boss = new Boss();

            // 看股票的同事
            StockObserver colleague1 = new StockObserver("同事1", boss);
            NBAObserver   colleague2 = new NBAObserver("同事2", boss);

            boss.Update += new EventHandler(colleague1.CloseStockMarket);
            boss.Update += new EventHandler(colleague2.CloseNBADirectSeeding);

            // 老闆回來
            boss.SubjectState = "我胡漢三回來了!";

            // 發出通知
            boss.Notify();

            Console.WriteLine("\n");

            ConcreteSubject  concreteSubject  = new ConcreteSubject();
            ConcreteObserver concreteObserver = new ConcreteObserver(concreteSubject, "testSubject");

            concreteSubject.Update += new EventHandler(concreteObserver.Function);

            concreteSubject.SubjectState = "ABC";
            concreteSubject.SubjectState = "CBA";

            Console.ReadLine();
        }
示例#10
0
        /// <summary>
        /// Entry point into console application.
        /// </summary>
        static void Main()
        {
            // Configure Observer pattern
            ConcreteSubject s = new ConcreteSubject();

            s.Attach(new ConcreteObserver(s, "X"));
            s.Attach(new ConcreteObserver(s, "Y"));
            s.Attach(new ConcreteObserver(s, "Z"));

            // Change subject and notify observers
            s.SubjectState = "ABC";
            s.Notify();


            // Wait for user
            Console.ReadKey();
        }
示例#11
0
        static void Main(string[] args)
        {
            //创建主题对象
            ConcreteSubject Bucciarati = new ConcreteSubject();

            //创建订阅者
            ConcreteObserverA Prosciutto = new ConcreteObserverA("普罗修特");
            ConcreteObserverB Pesci      = new ConcreteObserverB("贝西");

            //订阅者订阅主题对象(委托的多播)
            Bucciarati.Update += new EventHandler(Prosciutto.Attack);
            Bucciarati.Update += new EventHandler(Pesci.Shout);

            //主题对象通知事件
            Bucciarati.Notify();

            Console.Read();
        }
示例#12
0
        static void Main(string[] args)
        {
            ConcreteSubject subject = new ConcreteSubject();

            Observer observer1 = new ConcreteObserver();
            Observer observer2 = new ConcreteObserver();
            Observer observer3 = new ConcreteObserver();
            Observer observer4 = new ConcreteObserver();

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

            subject.Invoke();

            Console.ReadKey();
        }
示例#13
0
        static void Main()
        {
            // First example
            ConcreteSubject s = new ConcreteSubject();
            s.Attach(new ConcreteObserver(s, "x"));
            s.Attach(new ConcreteObserver(s, "y"));
            s.Attach(new ConcreteObserver(s, "z"));
            s.SubjectState = "abc";
            s.Notify();

            IBM ibm = new IBM("IBM", 120.00);
            ibm.Attach(new Investor("Sorros"));
            ibm.Attach(new Investor("Berkshire"));

            ibm.Price = 120.10;
            ibm.Price = 121.00;
            ibm.Price = 120.50;
            ibm.Price = 120.75;
            ibm.Notify();

            // Second example
            BaggageHandler provider = new BaggageHandler();
            ArrivalsMonitor observer1 = new ArrivalsMonitor("BaggageClaimMonitor1");
            ArrivalsMonitor observer2 = new ArrivalsMonitor("SecurityExit");

            provider.BaggageStatus(712, "Detroit", 3);
            observer1.Subscribe(provider);
            provider.BaggageStatus(712, "Kalamazoo", 3);
            provider.BaggageStatus(400, "New York-Kennedy", 1);
            provider.BaggageStatus(712, "Detroit", 3);
            observer2.Subscribe(provider);
            provider.BaggageStatus(511, "San Francisco", 2);
            provider.BaggageStatus(712);
            observer2.Unsubscribe();
            provider.BaggageStatus(400);
            provider.LastBaggageClaimed();

            // Third example
            var weatherData = new WeatherData();
            var forecastDisplay = new ForecastDisplay(weatherData);
            var heatIndexDisplay = new HeatIndexDisplay(weatherData);
            weatherData.setMeasurements(80, 65, 30.4f);
        }
示例#14
0
        public static void Run()
        {
            Console.WriteLine("This structural code demonstrates the Observer pattern in which registered objects are notified of and updated with a state change.\n");

            ConcreteSubject s = new ConcreteSubject();

            s.Attach(new ConcreteObserver(s, "X"));
            s.Attach(new ConcreteObserver(s, "Y"));
            s.Attach(new ConcreteObserver(s, "Z"));

            s.SubjectState = "ABC";
            s.Notify();

            /*
             * Observer X's new state is ABC
             * Observer Y's new state is ABC
             * Observer Z's new state is ABC
             */
        }
示例#15
0
        static void Main()
        {
            // Издатель.
            Subject subject = new ConcreteSubject();

            // Подписчик, с сообщенным лямбда выражением.
            Observer observer = new Observer((observerState) => Console.WriteLine(observerState + " 1"));

            // Подписка на уведомление о событии.
            subject.Event += observer;
            subject.Event += (observerState) => Console.WriteLine(observerState + " 2");

            subject.State = "State ...";
            subject.Notify();

            Console.WriteLine(new string('-', 11));

            // Отписка от уведомлений.
            subject.Event -= observer;
            subject.Notify();

            // Delay.
            Console.ReadKey();
        }
示例#16
0
 public ConcreteObserver(ConcreteSubject sub)
 {
     subject = sub;
 }
 public ConcreteObserver(ConcreteSubject subject, string Name)
 {
     concretesubject = subject;
     name            = Name;
 }
示例#18
0
 public ConcreteObserver(ConcreteSubject subject, Shape shape)
 {
     this.subject = subject;
     this.shape   = shape;
 }
示例#19
0
 public ConcreteObserver(ConcreteSubject subject)
 {
     this.subject = subject;
 }
示例#20
0
 public ConcreteObserver(string name, ConcreteSubject subject)
 {
     _name    = name;
     _subject = subject;
 }
示例#21
0
 public ConcreteObserver(ConcreteSubject subject, string name)
 {
     Subject = subject;
     _name   = name;
 }
示例#22
0
 public ConcreteObserver(ConcreteSubject s)
 {
     _s = s;
 }
示例#23
0
 public ConcreteObserver(string ObserverName, ConcreteSubject subject)
 {
     this._subject     = subject;
     this.ObserverName = ObserverName;
 }
 public ConcreteObserver(ConcreteSubject subject, string name)
 {
     this.subject = subject;
        this.name = name;
 }
示例#25
0
 static void Main()
 {
     var subject = new ConcreteSubject();
     subject.Attach(new ConcreteObserver(subject,"Observer 1"));
     subject.Attach(new ConcreteObserver(subject,"Observer 2"));
     subject.Attach(new ConcreteObserver(subject,"Observer 3"));
     subject.SetState("STATE");
 }
 public ConcreteObserver(string observerName, ConcreteSubject subject)
 {
     _subject      = subject;
     _observerName = observerName;
     _subject.Attach(this);
 }
示例#27
0
 public ConcreteObserver(string name, ConcreteSubject subject)
 {
     this.name    = name;
     this.Subject = subject;
 }
示例#28
0
        static void Main(string[] args)
        {
            #region 工厂方法
            double total = 0.0d;
            CashContext cc = new CashContext(new CashNormal());
            total = cc.GetResult(100.04);
            cc = new CashContext(new CashRebate("0.8"));
            total = cc.GetResult(100.04);
            Console.WriteLine(total);
            #endregion

            #region 装饰器方法
            Decorator.Component person = new Decorator.Component("xiaocai");

            Tshirt tshirt = new Tshirt();
            BigTrouser bt = new BigTrouser();

            bt.Decorator(person);
            tshirt.Decorator(bt);
            tshirt.show();

            Console.WriteLine("*****************************");
            #endregion

            #region 代理方法
            SchoolGirl sg = new SchoolGirl();
            sg.Name = "李娇骄";
            Proxy.Proxy daili = new Proxy.Proxy(sg);
            daili.GiveDolls();
            daili.GiveFlowers();
            #endregion

            #region 原型模式
            ConcretePrototype1 p1 = new ConcretePrototype1("123");
            ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();
            Console.WriteLine("Cloned :"+c1.Id);

            Resume a = new Resume("Andy");
            a.setInfo("Man", "24");
            a.setWorkExperience("1998-2005","IBM ");
            Resume b = (Resume)a.Clone();
            b.setWorkExperience("2002-2005", "Dell");
            a.display();
            b.display();
            #endregion

            #region 模板模式
            Console.WriteLine("Student A testPaper:");
            TestPaperA testA = new TestPaperA();
            testA.Test1();
            testA.Test2();
            Console.WriteLine("Student B testPaper:");
            TestPaperB testB = new TestPaperB();
            testB.Test1();
            testB.Test2();
            #endregion

            #region 抽象工厂方法
            User user = new User();

            IFactory factory = new SqlServerFactory();
            IUser iu = factory.CreateUser();
            //IUser riu = (IUser)Assembly.Load("AbstractFactory").CreateInstance("SqlserverUser");
            //反射
            //Assembly.Load("程序集名称").CreateInstance("程序集名称.类名称");
            iu.Insert(user);
            iu.GetUser(1);
            #endregion

            #region Facade 外观模式
            Fund jijin = new Fund();
            jijin.BuyFund();
            jijin.sellFund();
            #endregion

            #region 建造者模式
            Director director = new Director();
            abstractBuilder builder1 = new Builder1();
            abstractBuilder builder2 = new BuilderB();
            director.Construct(builder1);
            Builder.Builder b1 = builder1.getBuilder();
            b1.show();

            director.Construct(builder2);
            Builder.Builder b2 = builder2.getBuilder();
            b2.show();
            #endregion
            #region 观察者模式
            Observer.ConcreteSubject s = new Observer.ConcreteSubject();
            s.Attach(new Observer.ConcreteObserver(s, "x"));
            s.Attach(new Observer.ConcreteObserver(s, "y"));
            s.SubjectState = "ABC";
            s.Notify();
            ///下面是使用委托
            ///委托就是一种引用方法的类型。一旦为委托分配了方法,委托将于该方法具有完全相同的行为。
            ///委托方法的使用可以像其他的方法一样具有参数和返回值。委托可以看作是对函数的抽象,是函数的”类“,委托的实例将代表一个具体的函数
            ///一个委托可以搭载多个方法,所有方法被依次唤起,委托搭载的方法不需要属于同一个类,只需要具有相同的原型和形式,也就是拥有相同的参数列表和返回类型。
            ///在使用带参数的委托时,只需要在声明事件的地方将参数传递给事件。在绑定时将调用的方法绑定给事件。
            Bosscs boss = new Bosscs();
            StockObserver tongshi1 = new StockObserver("tongshi1",boss);
            NBAObserver tongshiNBA = new NBAObserver("tongshiNBA", boss);
            boss.Update += new EventHandler1(tongshi1.CloseStockMarket);
            boss.Update += new EventHandler1(tongshiNBA.CloseStockMarket);
            boss.update2 += new EventHandler2(tongshiNBA.print);
            boss.SubjectState = " I am back ";
            boss.Notify();
            #endregion

            #region 状态模式
            State.Context c = new State.Context(new CreateStateA());
            c.Request();
            c.Request();
            c.Request();
            c.Request();

            #endregion

            #region 备忘录模式
            Originator o = new Originator();
            o.State = "On";
            o.Show();
            Caretaker care = new Caretaker();
            care.Memento = o.CreateMemento();
            o.State = "Off";
            o.Show();

            o.SetMemento(care.Memento);
            o.Show();

            GameRole gameRole = new GameRole();
            gameRole.GetInitState();
            gameRole.StateDisplay();

            RoleStateManager stateManager = new RoleStateManager();
            stateManager.Memento = gameRole.SaveState();

            gameRole.Fight();
            gameRole.StateDisplay();

            gameRole.RecoveryState(stateManager.Memento);
            gameRole.StateDisplay();
            #endregion

            #region 组合模式
            Composite.Composite root = new Composite.Component("root");
            root.Add(new Leaf("Leaf A"));
            root.Add(new Leaf("Leaf B"));

            Composite.Composite comp = new Composite.Component("comp X");
            comp.Add(new Leaf("Leaf XA"));
            comp.Add(new Leaf("Leaf XB"));
            root.Add(comp);

            Composite.Composite comp2 = new Composite.Component("Comp X2");
            comp2.Add(new Leaf("Leaf X2A"));
            comp2.Add(new Leaf("Leaf X2B"));
            comp.Add(comp2);

            root.Add(new Leaf("Leaf C"));
            Leaf leaf = new Leaf("Leaf D");

            root.Add(leaf);
            root.Display(1);
            root.Remove(leaf);
            root.Display(1);
            #endregion

            #region 迭代器模式
            ConCreteAggregate aggregate = new ConCreteAggregate();
            aggregate[0] = "大鸟";
            aggregate[1] = "小菜";
            aggregate[2]="行李";
            aggregate[3] = "老外";
            aggregate[4] = "小偷";
            Iterator.Iterator myIterator = new ConCreteIterator(aggregate);
            object item = myIterator.First();
            while (!myIterator.IsDone())
            {
                Console.WriteLine(myIterator.CurrentItem() + "请买车票");
                myIterator.Next();
            }
            #endregion

            #region 单例模式
             //所有类都有构造方法,不编码则默认生成空的构造方法,若有显示定义的构造方法,默认的构造方法就会失效。只要将构造方法改写为私有的,外部的程序就不能通过new 来初始化它。
            //通过一个共有的方法来返回类的实例。
            Singleton.Singleton s1 = Singleton.Singleton.GetInstance();
            Singleton.Singleton s2 = Singleton.Singleton.GetInstance();

            if (s1 == s2)
            {
                Console.WriteLine("两个对象是相同的实例。");
            }

            #endregion

            #region 命令模式
            Receiver r = new Receiver();
            Command.Command command = new Command.ConcreteCommand(r);
            Invoker invoker = new Invoker();
            invoker.SetCommand(command);
            invoker.ExecuteCommand();
            #endregion

            #region 职责链模式
            Handler h1 = new ConcreteHandler1();
            Handler h2 = new ConcreteHandler2();
            h1.SetSuccessor(h2);
            int[] requests = { 2, 3, 4, 5, 6, 12, 34, 11, 15 };
            foreach (int request in requests)
            {
                h1.HandlerRequest(request);
            }
            #endregion

            #region 中介者模式
            ConcreteMediator mediator = new ConcreteMediator();
            ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);
            ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);
            mediator.Colleague1 = colleague1;
            mediator.Colleague2 = colleague2;
            colleague1.Send("吃饭了吗?");
            colleague2.Send("还没有呢");
            #endregion

            #region 享元模式
            int extri = 22;
            FlyweightFactory f = new FlyweightFactory();
            Flyweight.Flyweight fx = f.GetFlyweight("X");
            fx.Operation(--extri);

            Flyweight.Flyweight fy = f.GetFlyweight("Y");
            fy.Operation(--extri);

            Flyweight.Flyweight fz = f.GetFlyweight("Z");
            fz.Operation(--extri);

            #endregion

            #region 解释器模式
            <<<<<<< HEAD
            Interpreter.Context context = new Interpreter.Context();
            IList<Interpreter.AbstractExpression> list = new List<Interpreter.AbstractExpression>();
            list.Add(new Interpreter.TerminalExpression());
            list.Add(new Interpreter.NormalExpression());
            foreach (Interpreter.AbstractExpression exp in list)
                exp.Interpret(context);
            =======
            Interpreter.Context context1 = new Interpreter.Context();
            IList<AbstractExpression> list = new List<AbstractExpression>();
            list.Add(new TerminalExpression());
            list.Add(new NonTerminalExpression());
            foreach (AbstractExpression exp in list)
            {
                exp.Interpreter(context1);
            }
            #endregion

            #region 访问者模式
            ObjectStructure os = new ObjectStructure();
            os.Add(new Man());
            os.Add(new Woman());
            Success v1 = new Success();
            os.Display(v1);
            Failing f1 = new Failing();
            os.Display(f1);

            Amativeness a1 = new Amativeness();
            os.Display(a1);
            >>>>>>> 77e342ef6e96917a8dc01e72e41626dcffd4ba13
            #endregion
            Console.Read();
        }
示例#29
0
 public ConcreteObserver(string name, ConcreteSubject subject)
 {
     this.name = name;
     this.Subject = subject;
 }
示例#30
0
 public ConcreteObserver(ConcreteSubject subjet)
 {
     _subjet = subjet;
     subjet.Attach(this);
 }
 public Store(ConcreteSubject subject)
 {
     Subject = subject;
     Subject.RegisterObserver(this);
 }
 public Notification(ConcreteSubject subject)
 {
     Subject = subject;
     Subject.RegisterObserver(this);
 }
		public ConcreteObserver(ConcreteSubject subject) {
			this._subject = subject;
		}
示例#34
0
 public ConcreteObserver(ConcreteSubject subject, string name)
 {
     this.Subject = subject;
     this.name    = name;
 }
 public ConcreteObserver(ConcreteSubject concreteSubject, string name)
 {
     _concreteSubject = concreteSubject;
     _name            = name;
 }
示例#36
0
 public ConcreteObserver(ConcreteSubject subject, string name)
 {
     _subject = subject;
     _name = name;
 }
示例#37
0
 public ConcreteObserver(string name, ConcreteSubject subject)
 {
     _name = name;
     _subject = subject;
 }