using System;
using System.Collections.Generic;
using System.Text;
namespace ObserverExample
{
class Program
{
static void Main(string[] args)
{
ButtonPager buttonPager = new ButtonPager();
ListPager listPager = new ListPager();
Control gridview = new GridView();
Control label = new Label();
buttonPager.changePageHandler += new Pager.ChangePageHandler(buttonPager.ChangePage);
buttonPager.changePageHandler += new Pager.ChangePageHandler(gridview.ChangePage);
buttonPager.changePageHandler += new Pager.ChangePageHandler(label.ChangePage);
buttonPager.changePageHandler += new Pager.ChangePageHandler(listPager.ChangePage);
listPager.changePageHandler += new Pager.ChangePageHandler(buttonPager.ChangePage);
listPager.changePageHandler += new Pager.ChangePageHandler(gridview.ChangePage);
listPager.changePageHandler += new Pager.ChangePageHandler(label.ChangePage);
listPager.changePageHandler += new Pager.ChangePageHandler(listPager.ChangePage);
buttonPager.NextPage();
Console.WriteLine();
buttonPager.NextPage();
Console.WriteLine();
buttonPager.NextPage();
Console.WriteLine();
buttonPager.PreviousPage();
Console.WriteLine();
buttonPager.PreviousPage();
Console.WriteLine();
listPager.SelectPage(2);
Console.WriteLine();
listPager.SelectPage(1);
Console.WriteLine();
listPager.SelectPage(0);
}
}
abstract class Pager
{
protected int pageIndex = 0;
public int PageIndex
{
get { return pageIndex; }
set { pageIndex = value; }
}
protected int pageCount = 3;
public int PageCount
{
get { return pageCount; }
}
public event ChangePageHandler changePageHandler;
public delegate void ChangePageHandler(Pager sender);
protected void ChangePage()
{
if (changePageHandler != null)
changePageHandler(this);
}
}
class ButtonPager : Pager, Control
{
public void NextPage()
{
if (pageIndex < pageCount - 1)
{
Console.WriteLine("Click NextPage Button...");
pageIndex++;
ChangePage();
}
}
public void PreviousPage()
{
if (pageIndex > 0)
{
Console.WriteLine("Click PreviousPage Button...");
pageIndex--;
ChangePage();
}
}
public void ChangePage(Pager sender)
{
base.pageIndex = sender.PageIndex;
if (pageIndex > 0 && pageIndex < pageCount - 1)
Console.WriteLine("<<Previous Next>>");
else if (pageIndex == 0)
Console.WriteLine("Next>>");
else
Console.WriteLine("<<Previous");
}
}
class ListPager : Pager, Control
{
public void SelectPage(int pageIndex)
{
if (pageIndex >= 0 && pageIndex < pageCount)
{
Console.WriteLine(string.Format("Click <{0}> Link...", pageIndex + 1));
base.pageIndex = pageIndex;
ChangePage();
}
}
public void ChangePage(Pager sender)
{
base.pageIndex = sender.PageIndex;
for (int i = 1; i <= pageCount; i++)
{
if (pageIndex + 1 == i)
Console.Write(string.Format(" <{0}> ", i));
else
Console.Write(string.Format(" {0} ", i));
}
Console.WriteLine();
}
}
interface Control
{
void ChangePage(Pager sender);
}
class GridView : Control
{
public void ChangePage(Pager sender)
{
Console.WriteLine(string.Format("GridView->Show data of page {0}", sender.PageIndex + 1));
}
}
classEN-
分享到:
Global site tag (gtag.js) - Google Analytics
|
相关推荐
完整的C#设计模式PDF版 C#设计模式(1) 4 一、 C# 面向对象程序设计复习 5 二、 设计模式举例 5 三、 先有鸡还是先有蛋? 7 四、 大瓶子套小瓶子还是小瓶子套大瓶子? 8 五、 .net本质 9 C#设计模式(2) 11 一、 ...
C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)
设计模式(19)-Observer Pattern 设计模式(18)-Command Pattern 设计模式(17)-Chain of Responsibility Pattern 设计模式(16)-Bridge Pattern 设计模式(15)-Facade Pattern 设计模式(14)-Flyweight...
此文档有助于学习C#委托、事件和Observer设计模式。
C#设计模式(1) 一、 C# 面向对象程序设计复习 二、 设计模式举例 三、 先有鸡还是先有蛋? 四、 大瓶子套小瓶子还是小瓶子套大瓶子? 五、 .net本质 C#设计模式(2) 一、 "开放-封闭"原则(OCP) 二、 ...
C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 C#面向对象设计模式纵横谈(20):(行为型模式) Chain Of Responsibility 职责链模式 C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘...
详解C#委托,事件,Observer设计模式 1.将方法作为方法的参数 2.将方法绑定到委托 3.事件的由来 4.事件和委托的编译代码 5.委托、事件与Observer设计模式 6..Net Framework中的委托与事件
观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式...
Observer设计模式是一种经典的设计模式,在GOF 23种设计模式种 比较常用于实际。主要是有类指针传递并引用方法和消息传递响应的方法来实现。
设计模式C++学习之观察者模式(Observer)
主要介绍了C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题,简单讲述了观察者模式的原理并结合具体实例形式分析了使用观察者模式解决牛顿童鞋成绩问题的具体步骤相关操作技巧,并附带demo源码供读者下载参考,...
解释器模式将描述怎样 在 有了一个简单的文法后, 使用模式设计解释这些语句。 在解释器模式里面提到的语言是指任 何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表 文法的命令类的等 级结构,也...
36种最新设计模式整理 Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 ...
观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略...
设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之Command 设计模式之State 设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor
观察者模式中推拉模式两种实现方式,主要是针对开发的一个项目的模型抽象出来的。有一个项目,有压力传感器、位移传感器、震动传感器等多种传感器每种类型有若干个传感器,对每个传感器做特定操作会引发历史曲线图、...
工厂方法模式(Factory Method Pattern) 观察者模式(Observer Pattern) 建造者模式(Builder Pattern) 解释器模式(Interpreter Pattern) 命令模式(Command Pattern) 模板方法模式(Template Method Pattern) 桥接模式...
1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之Observer 9、...
观察者模式(Observer) 用意:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。
设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之Command 设计模式之State 设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor