有 这样一种情况 ,看一个视频 用户分 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,设计模式 From: https://www.cnblogs.com/soulice/p/16596177.html