前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习。由于文本太多,按类型分开。这一篇是 设计模式 常问问题总结,有帮助的可以收藏。
1. 面向对象设计原则:
1. 单一职责原则
一个类,最好只做一件事,只有一个引起它的变化。
2. 开放封闭原则(开闭原则)
对于扩展是开放的,对于更改是封闭的。
为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。
3. 里氏替换原则
子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。
里氏代换原则是实现开闭原则的重要方式之一,在运用里氏代换原则时,应该将父类设计为抽象类或者接口,让子类继承父类或实现父接口,并实现在父类中声明的方法,运行时,子类实例替换父类实例,可以很方便的扩展系统的功能,无须修改原有子类的代码,增加新的功能可以通过增加一个新的子类来实现。
4. 依赖倒置原则
抽象不应该依赖于细节,细节应当依赖于抽象。换句话说,要针对接口编程,而不是针对实现编程。
5. 接口隔离原则
使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些他不需要的接口。
6. 合成复用原则
尽量使用对象组合,而不是继承来达到复用的目的。
7. 迪米特法则
一个软件实体应当尽可能少地与其他实体发生相互作用。
2. 工厂模式: (GameManager,UIManager)
定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。这满足创建型模式中所要求的“创建与使用相分离”的特点。
使用场景:比如说写技能是一系列类,那么就可以使用工厂模式创建。
游戏场景转换;角色AI状态管理。
3. 观察者模式 (服务器与客户端之间的通信)
观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。
类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。
多用于角色血条值下降被改变(防御力、攻击力等)
4. 发布-订阅者模式(服务器与客户端之间的通信)
是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。而是将发布的消息分为不同的类别,无需了解哪些订阅者(如果有的话)可能存在。同样的,订阅者可以表达对一个或多个类别的兴趣,只接收感兴趣的消息,无需了解哪些发布者存在。
观察者模式 与 发布/订阅者模式 的区别区别:
在观察者模式中,观察者是知道Subject的,Subject一直保持对观察者进行记录。然而,在发布订阅模式中,发布者和订阅者不知道对方的存在。它们只有通过消息代理进行通信。
观察者和被观察者,是松耦合的关系。发布订阅模式里,发布者和订阅者,不是松耦合,而是完全解耦的。观察者模式大多数时候是同步的,比如当事件触发,Subject就会去调用观察者的方法。而发布-订阅模式大多数时候是异步的(使用消息队列)。