ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

23设计模式 24 visitor 访问者模式

2022-08-17 18:30:08  阅读:130  来源: 互联网

标签:24 AD 23 visitor get VIP User SVIP 设计模式


   有 这样一种情况 ,看一个视频    用户分     normal,  VIP ,SVIP  

  abstract  User  {

}

Normal :User

VIP:User

SVIP  :User   

在子类中override  User中的一些方法。   

现在要求新的业务, 在VIP 中根据用户年龄段分别推送广告。   我 第一反应是增加   VIP 的子类   VIPAge1    VIPAge2  VIPAge3

然后再   VIPAge1    VIPAge2  VIPAge3 中分别写业务逻辑,    VIPAge1    VIPAge2  VIPAge3 的声明上端直接指定,-----------可以实现业务。

现在又有原因,不能在上端 判断 VIPAge1    VIPAge2  VIPAge3 .也就是无法声明,同时要求   normal 和SVIP也要加相应广告推送。且时长不同,内容不同 ,判断不同(来源不同))

按我上面的方法能做新增的子类会无穷尽的,  

因此新增一个   ------新增Visitor    用访问者模式, 

abstract  visitor   {

  get AD  noraml  {}

get AD VIP  {}

get AD  SVIP{}

}

------------------

Age Get AD:visitor

{

  override get AD VIP {}

}

Source Get AD:visitor

{

  override get AD  noraml  {}

}

----------------

上端调用   viditor

VIP:User{

实现 

public override void GetADVisitor(IVisitor visitor)
{
visitor.GetADVip(this);//this 是当前的实例
}

age Get AD :visitor 中实现真正的业务逻辑

{

get AD VIP(  user) 

}

相当于把业务逻辑转移,     优点    visitor 可随意扩展,,     但是    normal,  VIP ,SVIP   一动的话,  变动会很大

标签:24,AD,23,visitor,get,VIP,User,SVIP,设计模式
来源: https://www.cnblogs.com/soulice/p/16596177.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有