96SEO 2026-02-19 18:07 0
又叫发布-订阅publish/Subscrib模式。

定义了一种一对多的依赖关系让多个观察者对象同时监听某一个主题对象。
这个主题对象在状态发生变化时会通知所有观察者对象使他们能够自动更新自己。
观察者类似于卧底这样一个角色。
在上班的时候难免会有人趁老板不在的时候做一些工作之外的事情例如炒炒股看看NBA之类的那如何应对老板突然回来这件事情呢我们就需要卧底这样一个人给我们放风老板一回来就通知这些人“老板回来了”。
这其实就是一种观察者模式
Subject类它把所有对观察者对象的引用保存在一个聚集里每个主题都可以有任何数量的观察者。
抽象主题提供一个接口可以增加和删除观察者对象。
Observer类抽象观察者为所有的具体观察者定义一个接口在得到主题的通知时更新自己。
ConcreteSubject类具体主题将有关状态存入具体观察者对象在具体主题的内部状态改变时给所有登记过的观察者发出通知。
ConcreteObserver类具体观察者实现抽象观察者角色所要求的更新接口以便使本身的状态与主题的状态相协调。
观察者模式所做的工作其实就是在解除耦合让耦合的双方都依赖于抽象而不是依赖于具体。
从而使得各自的变化都不会影响另一边的变化。
满足依赖倒转原则
场景小菜公司的同事在老板外出的期间偷偷地通过网页看股票行情但是一不小心老板就回来了让老板看到工作的时候做这些总是不太好的如果避免这样的情况呢就需要前台秘书这样的一个卧底老板一回来了前台秘书童子喆就拨了个电话告诉同事。
但有一次因为老板回来直接就找童子喆做一些其他事情童子喆就没来得及打电话导致同事就没被通知到“老板回来了”
//IList接口List泛型集合数据类型是StockObserverprivate
observer){observers.Add(observer);
//通知{Console.WriteLine({0}{1}关闭股票行情继续工作,
tongzizhe.Attach(tongshi2);//发现老板回来
tongzizhe.Notify();Console.ReadKey
Update(){Console.WriteLine({0}{1}
Update(){Console.WriteLine({0}{1}
//针对抽象编程减少了与具体类的耦合{observers.Add(observer);}//减少public
//针对抽象编程减少了与具体类的耦合{observers.Remove(observer);}//通知public
observers)o.Update();}//前台状态public
tongzizhe.Attach(tongshi2);//发现老板回来
tongzizhe.Notify();Console.ReadKey
observer){observers.Add(observer);}//减少public
observer){observers.Remove(observer);}//通知public
observers)o.Update();}//前台状态public
observer){observers.Add(observer);}//减少public
observer){observers.Remove(observer);}//通知public
observers)o.Update();}//前台状态public
Update(){Console.WriteLine({0}{1}
huhansan);huhansan.Attach(tongshi1);
huhansan.Attach(tongshi2);huhansan.Detach(tongshi1);
huhansan.Notify();Console.ReadKey();
Subject:抽象通知者/主题,一般用一个抽象类或者一个接口实现.它把所有对观察者对象的引用保存在一个聚集里,每个主题都可以由任何数量的观察者.抽象主题提供一个接口,可以增加和删除观察者对象
observer){observers.Add(observer);}//删除观察者public
observer){observers.Remove(observer);}//通知public
Observer类抽象观察者,为所有的具体观察者定义一个接口,在得到主题的通知时更新自己.这个接口叫做更新接口.抽象观察者一般用一个抽象类或者一个接口实现.更新接口通常包含一个Update()方法,这个方法叫做更新方法.
ConcreteSubject具体主题/具体通知者,将有关状态存入具体观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发出通知.具体主题角色同一个具体子类实现.
ConcreteObserver具体观察者,实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调.具体观察者角色可以保存一个指向具体主题对象的引用.具体观察者角色通常用一个具体子类实现.
ConcreteObserver(ConcreteSubject
//赋值Console.WriteLine(观察者{0}的新状态是{1},
观察者模式的动机是将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就需要维护相关对象间的一致性.我们不希望为了维持一致性而使各类紧密耦合,这样会给维护\扩展和重用都带来不便.
get访问器返回与声明的属性相同的数据类型表示的意思是调用时可以得到内部字段的值或引用set访问器没有显式设置参数但它有一个隐式参数用关键字value表示它的作用是调用属性时可以给内部的字段或引用赋值
如果没有初始化语句字段的值会被编译器设为默认值默认值由字段的类型决定。
每种值类型的默认值都是0bool型是false引用类型默认为null。
private私有的只在类的内部可访问成员默认是这个public公有的对任何类可访问protected受保护的只允许该类的派生类访问internal内部的同一项目所有类可访问
所有的类都有构造方法不带参数的构造方法称为“默认构造方法”如果你不编码则系统默认生成空的构造方法。
若定义了新的构造方法那么默认的构造方法就会失效。
name;//方法重载方法名相同、数据类型/个数不同public
arrayList集合不知道存什么类型不知道存多少个List知道存什么类型不知道存多少个。
就是为了专门处理某种类型在尖括号中写什么类型这个集合就变成了什么类型的集合添加数据、插入数据、索引访问数据都是这个类型的不用考虑所有的转换问题
//实例化int类型//随机的往这个List集合中添加十个数字不能重复求和求最大值求最小值求平均值Random
(num)){list.Add(num);}}Console.WriteLine(最大值{0},list.Max
());Console.WriteLine(最小值{0},list.Min
());Console.WriteLine(和为{0},list
());Console.WriteLine(平均值为:{0},list.Average
());Console.ReadKey();Liststring
//实例化string类型listStr.Add(哈哈小杨又变帅了);
抽象类不能实例化抽象方法是必须被子类重写的方法如果类中包含抽象方法那么类就必须定义为抽象类不论是否还包含其他一般方法
接口提出了一种契约或者说规范让使用接口的程序设计人员必须严格遵守接口提出的约定。
接口就可以看做是这种标准它强制性地要求派生类必须实现接口约定的规范以保证派生类必须拥有某些特性。
不能实例化不能有构造方法和字段不能有修饰符接口包含事件、索引器、方法、属性不包含方法的实现实现接口的类必须实现接口中的所有方法和属性
-高层模块不应该依赖底层模块。
两个都应该依赖抽象接口/抽象类。
我现在要设计一个汽车我先设计汽车大概的样子先设计轮胎根据轮胎在设计底盘根据底盘在设计车身。
现在我想要修改轮胎的尺寸是不是就需要修改底盘修改车身整个全部都得修改如果我们倒过来看在设计车身根据车身在设计底盘根据底盘在设计轮胎这样的话如果轮胎的尺寸变了也不会影响到其他的部分
针对书上所举的例子无论主板、CPU、内存、硬盘都是在针对接口设计的。
CPU作为主板上一个可移动的、可扩展的部分在设计主板的时候只需要把接口定义好内部再复杂我也不让外界知道而主板只需要预留与CPU阵脚的插槽就可以了。
内存、硬盘、显卡都是如此哪部分坏了直接更换那部分就行了而不会导致整个主板全部都要换。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback