设计模式
设计模式是在实际开发中总结出来的经验之谈,通过编写和阅读大量代码,以及学习优秀代码,我们可以更好地理解和运用设计模式。以下是一些设计模式的核心思想和原则,以及一些相关的书籍。
基础概念
设计模式的核心思想是封装、抽象、继承、多态等面向对象的基本原则。通过将复杂的方法封装起来,将需求有变化的地方提取出一个公共的接口或抽象类,可以提高代码的可维护性和可扩展性。
书籍推荐
- 《设计模式,可复用面向对象软件的基础》
- 《Head First 设计模式》
- 《设计模式与完美游戏开发》
七大原则
1、开闭原则 (面向对象设计的目标)
对扩展开放,对修改关闭
在设计一个模块的时候,应该使这个模块可以在不被修改的前提下被扩展
需求:会有新需求
实现方法:
- 抽象约束:通过接口或抽象类约束扩展
2、依赖倒转原则 (面向对象设计的主要手段)
高层模块不应该依赖底层模块,二者都应该依赖其抽象
抽象不应该依赖细节(实现类),细节应该依赖抽象
针对接口编程,不要针对实现编程(通过接口或者抽象类调用)
A 调用 B,B 调用 C,则 A是高层模块,C是低层模块
3、里氏替换原则 (是实现开闭原则的重要方式之一)
使用A的地方替换成使用B不会产生任何错误或异常,反之不行
子类可以扩展父类的功能,但不能改变父类原有的功能
重写父类方法
4、单一职责原则
一个对象只负责一项职责,该职责被完整的封装在一个类中
一个类只有一个引起它变化的原因
责任链模式:
转交责任,让多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系
5、接口隔离原则
客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上
6、合成复用原则
在该用继承的时候才用继承,否则尽量使用 组合 的方式
7、迪米特法则(最少知识法则)
降低耦合,一个类对另一
一个对象应该对其他对象保持最少的了解
游戏 设计模式
// 脚本与游戏物体分离 (不常用)
- 创建型模式:这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。常见的创建型模式有工厂模式、抽象工厂模式、单例模式、建造者模式和原型模式。
- 结构型模式:这些模式关注对象之间的组合和关系,旨在解决如何构建灵活且可复用的类和对象结构。常见的结构型模式有适配器模式、桥接模式、过滤器模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。
- 行为型模式:这些模式关注对象之间的通信和交互,旨在解决对象之间的责任分配和算法的封装。常见的行为型模式有责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、空对象模式、策略模式、模板模式和访问者模式。
状态模式
外观模式
引入一个外观类(Facade),用来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,使子系统与客户端的耦合度降低
单例模式
中介者模式
定义一个中介对象来封装一系列对象之间的交互,使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互
桥接模式 ?
一种结构型设计模式,
将抽象(基类)部分与它的实现部分分离,使它们都可以独立地变化
适用环境:
一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。
如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
策略模式
一种行为型设计模式
定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户
模板方法模式
模板方法模式就是定义一个操作中的算法框架,将一些具体步骤延迟到子类中实现。这样,不同的子类可以根据需要重新定义这些步骤,从而实现不同的功能。
有限状态机
工厂模式 -> 解耦合
(简单工厂)静态工厂模式:
switch case 不符合开闭原则
工厂方法模式:
一个工厂(继承自一个基类)生产一个产品
抽象工厂模式:
一个工厂生产一类产品