23设计模式 24 visitor 访问者模式
有 这样一种情况 ,看一个视频 用户分 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 一动的话, 变动会很大
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现