委托的订阅发布模式

委托的订阅发布模式

Delegate这个关键字,在C#里翻译成委托,其英文原意就是代理,委托的意思。想想生活中委托的实例。比如生产香皂的公司,它可以把销售的业务交给代理商,而不是自己与终端用户打交道。

我们把生产香皂的公司写成类 ProductClass,负责销售的代理商写成SalesClass,生产者生产好产品以后,由仓库的人通知销售代理商拿货,最后代理商销售给终端用户(方法SalseToUser();)

到这里,我们已经创建了两个类 ProductClass和SalesClass,而负责告诉代理商过来拿货去卖的仓库人员?就是我们的重点:委托。我们把他定义为delegate GetProductToSaleHandler()。

请看代码示例:

Delegate voidGetProductToSaleHandler(object products);//生产商负责通知代理商的部门,仓库。

Public ClassProductClass

{

       GetProductToSaleHandlergetProductToSaleHandler;//

       Public object  Product()//生产产品的类

       {

              ……//N多代码,表示产品生产完成,生产好的产品叫products            

}

Public SaleToUser(object products)

{

       getProductToSaleHandler(products)//生产好以后,通知代理商来拿货去卖

}

}

Public classSalesClass

{

       Public SalesToUser(object products)

{

       ……//N多代码,表示卖给用户了

}    

}

 

于是我们在实际生活中发生了这样一幕:

Class program

{

       Public static void Main()

{

       ProductClassproductClass = new ProductClass();

       SalesClass salesClass =new SalesClass();

       productClass. getProductToSaleHandler+=salesClass. SalesToUser;

       //注意这里,通知代理的动作。

       object products = productClass.Product();

       //生产好产品

       productClass.Sale(products);

通知代理商去卖。

}

}

 

然而,我们通常是有多个代理商的,于是我们可以这样写。

Class program

{

       Public static void Main()

{

       ProductClassproductClass = new ProductClass();

       SalesClass salesClassA =new SalesClass();

SalesClass salesClassB = new SalesClass();

SalesClass salesClassB = new SalesClass();

       productClass. getProductToSaleHandler+=salesClassA. SalesToUser;

productClass. getProductToSaleHandler+= salesClassB. SalesToUser;

       productClass. getProductToSaleHandler+=salesClassC. SalesToUser;

       //产品生产好以后,通知A,B,C三个代理商去卖。

       object products =productClass.Product();

       //生产好产品

       productClass.Sale(products);

通知代理商去卖。

}

}

 

接下来,谈谈,委托人发布订阅模式,应该在什么场景下使用。

对于我们上面的例子,ProductClass是发布者,SalsesClass是订阅者。如果发布者不愿意去做,或者没有能力去做的事。而订阅者只负责接收发布者的信息,然后去完成自己的任务。且订阅者的行为方式有多个,且可能会变化。

附件是源代码,实现的功能是:打印条码。

逻辑是:打印的条码需要根据用户配置自由生成,比如,用户的条码可以由 版本号+销售代码+机型+……组成,但有的用户可能会配置成 版本号+生产代码+车间识别码+……

而版本号,生产代码这些数据,是需要根据用户输入的条件,去数据库中查询解析的。


原代码是不能显示的那个图片,右键下载后,后缀改为zip即可


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值