当前位置: 首页 > news >正文

不同网站对商家做o2o的政策网站使用方法

不同网站对商家做o2o的政策,网站使用方法,制作网页教程的方法,seo怎么收费的1. 概述 有时被称作发布/订阅模式#xff0c;观察者模式定义了一种一对多的依赖关系#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时#xff0c;会通知所有观察者对象#xff0c;使它们能够自动更新自己。 2. 解决的问题 将一个系统分割… 1. 概述   有时被称作发布/订阅模式观察者模式定义了一种一对多的依赖关系让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时会通知所有观察者对象使它们能够自动更新自己。 2. 解决的问题   将一个系统分割成一个一些类相互协作的类有一个不好的副作用那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合这样会给维护、扩展和重用都带来不便。观察者就是解决这类的耦合关系的。 3. 模式中的角色   3.1 抽象主题Subject它把所有观察者对象的引用保存到一个聚集里每个主题都可以有任何数量的观察者。抽象主题提供一个接口可以增加和删除观察者对象。   3.2 具体主题ConcreteSubject将有关状态存入具体观察者对象在具体主题内部状态改变时给所有登记过的观察者发出通知。   3.3 抽象观察者Observer为所有的具体观察者定义一个接口在得到主题通知时更新自己。   3.4 具体观察者ConcreteObserver实现抽象观察者角色所要求的更新接口以便使本身的状态与主题状态协调。 4. 模式解读   4.1 观察者模式的类图        4.2 观察者模式的代码 /// summary/// 抽象主题类/// /summarypublic abstract class Subject{private IListObserver observers new ListObserver();/// summary/// 增加观察者/// /summary/// param nameobserver/parampublic void Attach(Observer observer){observers.Add(observer);}/// summary/// 移除观察者/// /summary/// param nameobserver/parampublic void Detach(Observer observer){observers.Remove(observer);}/// summary/// 向观察者们发出通知/// /summarypublic void Notify(){foreach (Observer o in observers){o.Update();}}}/// summary/// 抽象观察者类为所有具体观察者定义一个接口在得到通知时更新自己/// /summarypublic abstract class Observer{public abstract void Update();}/// summary/// 具体观察者或具体通知者将有关状态存入具体观察者对象在具体主题的内部状态改变时给所有登记过的观察者发出通知。具体主题角色通常用一个具体子类实现。/// /summarypublic class ConcreteSubject : Subject{private string subjectState;/// summary/// 具体观察者的状态/// /summarypublic string SubjectState{get { return subjectState; }set { subjectState value; }}}/// summary/// 具体观察者实现抽象观察者角色所要求的更新接口已是本身状态与主题状态相协调/// /summarypublic class ConcreteObserver : Observer{private string observerState;private string name;private ConcreteSubject subject;/// summary/// 具体观察者用一个具体主题来实现/// /summarypublic ConcreteSubject Subject{get { return subject; }set { subject value; }}public ConcreteObserver(ConcreteSubject subject, string name){this.subject subject;this.name name;}/// summary/// 实现抽象观察者中的更新操作/// /summarypublic override void Update(){observerState subject.SubjectState;Console.WriteLine(The observers state of {0} is {1}, name, observerState);}}   4.3 客户端代码 class Program{static void Main(string[] args){// 具体主题角色通常用具体自来来实现ConcreteSubject subject new ConcreteSubject();subject.Attach(new ConcreteObserver(subject, Observer A));subject.Attach(new ConcreteObserver(subject, Observer B));subject.Attach(new ConcreteObserver(subject, Observer C));subject.SubjectState Ready;subject.Notify();Console.Read();}}   运行结果    5. 模式总结   5.1 优点     5.1.1 观察者模式解除了主题和具体观察者的耦合让耦合的双方都依赖于抽象而不是依赖具体。从而使得各自的变化都不会影响另一边的变化。   5.2 缺点     5.2.1 依赖关系并未完全解除抽象通知者依旧依赖抽象的观察者。   5.3 适用场景     5.3.1 当一个对象的改变需要给变其它对象时而且它不知道具体有多少个对象有待改变时。     5.3.2 一个抽象某型有两个方面当其中一个方面依赖于另一个方面这时用观察者模式可以将这两者封装在独立的对象中使它们各自独立地改变和复用。   6. 模式引申应用C#中的事件委托来彻底解除通知者和观察者之间的耦合。    6.1 关于委托的定义委托是一种引用方法的类型。一旦为委托分配了方法委托将与该方法有相同的行为。委托方法可以像其它任何方法一样具有参数和返回值。委托可以看作是对函数方法的的抽象是函数的“类”委托的实例代表一个或多个具体的函数它可以是多播的。    6.2 关于事件事件基于委托为委托提供了一种发布/订阅机制。事件的订阅与取消与我们刚才讲的观察者模式中的订阅与取消类似只是表现形式有所不同。在观察者模式中订阅使用方法Attach来进行在事件的订阅中使用“”。类似地取消订阅在观察者模式中用Dettach而事件的取消用“-”。   7. 下面例子分别用观察者模式事件机制来实现   7.1 实例描述客户支付了订单款项这时财务需要开具发票出纳需要记账配送员需要配货。   7.2 观察者模式的实现     7.2.1 类图          7.2.2 代码实现 /// summary/// 抽象观察者/// /summarypublic interface ISubject{void Notify();}/// summary/// 工作岗位作为这里的观察者的抽象/// /summarypublic abstract class JobStation{public abstract void Update();}/// summary/// 具体主题这里是客户/// /summarypublic class Customer : ISubject{private string customerState;private ListJobStation observers new ListJobStation();/// summary/// 增加观察者/// /summary/// param nameobserver/parampublic void Attach(JobStation observer){this.observers.Add(observer);}/// summary/// 移除观察者/// /summary/// param nameobserver/parampublic void Detach(JobStation observer){this.observers.Remove(observer);}/// summary/// 客户状态/// /summarypublic string CustomerState{get { return customerState; }set { customerState value; }}public void Notify(){foreach (JobStation o in observers){o.Update();}}}/// summary/// 会计/// /summarypublic class Accountant : JobStation{private string accountantState;private Customer customer;public Accountant(Customer customer){this.customer customer;}/// summary/// 更新状态/// /summarypublic override void Update(){if (customer.CustomerState 已付款){Console.WriteLine(我是会计我来开具发票。);accountantState 已开发票;}}}/// summary/// 出纳/// /summarypublic class Cashier : JobStation{private string cashierState;private Customer customer;public Cashier(Customer customer){this.customer customer;}public override void Update(){if (customer.CustomerState 已付款){Console.WriteLine(我是出纳员我给登记入账。);cashierState 已入账;}}}/// summary/// 配送员/// /summarypublic class Dilliveryman : JobStation{private string dillivierymanState;private Customer customer;public Dilliveryman(Customer customer){this.customer customer;}public override void Update(){if (customer.CustomerState 已付款){Console.WriteLine(我是配送员我来发货。);dillivierymanState 已发货;}}}     7.2.3 客户端代码 class Program{static void Main(string[] args){Customer subject new Customer();subject.Attach(new Accountant(subject));subject.Attach(new Cashier(subject));subject.Attach(new Dilliveryman(subject));subject.CustomerState 已付款;subject.Notify();Console.Read();}}     运行结果     我是会计我来开具发票。    我是出纳员我给登记入账。    我是配送员我来发货。     7.3 事件实现     7.3.1 类图          通过类图来看观察者和主题之间已经不存在任何依赖关系了。     7.3.2 代码实现      /// summary/// 抽象主题/// /summarypublic interface ISubject{void Notify();}/// summary/// 声明委托/// /summarypublic delegate void CustomerEventHandler();/// summary/// 具体主题/// /summarypublic class Customer : ISubject{private string customerState;// 声明一个委托事件类型为 CustomerEventHandlerpublic event CustomerEventHandler Update;public void Notify(){if (Update ! null){// 使用事件来通知给订阅者Update();}}public string CustomerState{get { return customerState; }set { customerState value; }}}/// summary/// 财务已经不需要实现抽象的观察者类并且不用引用具体的主题/// /summarypublic class Accountant{private string accountantState;public Accountant(){ }/// summary/// 开发票/// /summarypublic void GiveInvoice(){Console.WriteLine(我是会计我来开具发票。);accountantState 已开发票;}}/// summary/// 出纳已经不需要实现抽象的观察者类并且不用引用具体的主题/// /summarypublic class Cashier{private string cashierState;public void Recoded(){Console.WriteLine(我是出纳员我给登记入账。);cashierState 已入账;}}/// summary/// 配送员已经不需要实现抽象的观察者类并且不用引用具体的主题/// /summarypublic class Dilliveryman{private string dillivierymanState;public void Dilliver(){Console.WriteLine(我是配送员我来发货。);dillivierymanState 已发货;}}     7.3.3 客户端代码 class Program{static void Main(string[] args){Customer subject new Customer();Accountant accountant new Accountant();Cashier cashier new Cashier();Dilliveryman dilliveryman new Dilliveryman();// 注册事件subject.Update accountant.GiveInvoice;subject.Update cashier.Recoded;subject.Update dilliveryman.Dilliver;/** 以上写法也可以用下面代码来替换subject.Update new CustomerEventHandler(accountant.GiveInvoice);subject.Update new CustomerEventHandler(cashier.Recoded);subject.Update new CustomerEventHandler(dilliveryman.Dilliver);*/subject.CustomerState 已付款;subject.Notify();Console.Read();}}     运行结果     我是会计我来开具发票。    我是出纳员我给登记入账。    我是配送员我来发货。 转载于:https://www.cnblogs.com/Free-Thinker/p/4730227.html
http://wiki.neutronadmin.com/news/355705/

相关文章:

  • 设计君网站博客社区类网站模板
  • 网站托管服务内容泉州疾控中心发布最新消息
  • 苏州网站建设建站网做外贸用什么网站比较好
  • 海淀做网站公司沙漠风网站建设
  • 有需要做网站推广找我扬州市市政建设处网站
  • 网站开发工具 n深圳网站建设相关推荐
  • 网页设计构建的基本流程网站建设优化服务特色
  • 如何查询网站域名备案怎么制作图片文档
  • 网站建设类有哪些职位三亚网站建设美工
  • 哪些网站使用wordpress做网站服务器需要系统
  • 本墨陈黑做网站有版权wordpress主题评论制作
  • 建站平台wordpress默认摘要
  • 网站seo方法网站建设接单
  • 3合1网站建设哪家好哪个公司网站做的最好
  • 关于网站建设的介绍电商平台怎么做
  • 网站做三个月收录100设计网站公司价格
  • 企业手机端网站模板下载海南网站建设报价方案
  • 做爰网站视屏建设企业网站的意义
  • 紫搜做网站wordpress 4.5 漏洞
  • wix做的网站能扒下来网站开发需求报告
  • 网站设计 职业阿里巴巴运营技巧和方法
  • 自己做网站 需要服务器吗百度怎么做广告推广
  • 公司网站建设包括哪些东西网站制作软件图标
  • 中英文的网站怎么建设wordpress号码
  • 建站模板网站wordpress软件
  • 网站开发要什么软件有哪些彩票网站怎么建设
  • 做网站协议书游戏推广代理平台
  • 网站样版风格排版h5制作软件下载
  • 太原网站建设详细策划资讯类网站怎么做
  • 宁波企业网站开发公司成都软件开发网站建设