作业二
| 这个作业属于哪个课程 | <班级的链接> |
|---|---|
| 这个作业要求在哪里 | <作业要求的链接> |
| 这个作业的目标 | 阅读相关书籍,学习、理解软件设计原则和设计模式,并且做读书笔记 |
参考资料:《软件设计模式》 朱洪军著
一、软件设计原则
1.单一职责原则:一个类或模块应仅有一个引起其变化的因素(职责)。
2.开放/闭合原则:类或代码对扩展是开放的,对修改是闭合的。
3.接口隔离原则:如果某个接口的行为不是内聚的,就应该按照业务分组,并将分组后的业务行为通过隔离的接口单独定义。
4.依赖倒置原则:高层模块不应依赖于低层模块,二者都应该依赖于抽象;抽象不应依赖于细节,细节应依赖于抽象。
5.Liskov替换原则:子类对象必须能够完全替换掉它们的父类对象,而不需要改变父类的任何属性。
二、软件设计模式

1.创建型模式
| 创建者模式 | 定义 |
|---|---|
| 单例模式 | 一个类只有一个实例对象,并且提供访问这个对象的全局方法。 |
| 原型模式 | 通过复制自己来构造一个新的目标实例对象 。 |
| 构造器模式 | 将产品的复杂构造过程进行独立的封装,通过使用提供的接口完成产品的构造。 |
| 抽象工厂模式 | 在不指定具体产品类的情况下,为相互关联的产品簇或产品集提供创建接口,保证产品簇的一致性。 |
| 工厂方法模式 | 由工厂方法类定义产品结构,由子类实现产品对象的构建。 |
2.结构型模式
| 结构型模式 | 定义 |
|---|---|
| 适配器模式 | 将某种接口或数据结构转换,使得原本无法使用的目标类可以使用。 |
| 桥模式 | 将代码的实现层和抽象层分离,使他们可以自由变化。 |
| 组合模式 | 使用组合和继承关系将聚合体及其元素分解成树状结构,方便在不需要区分他们的情况下使用统一的接口使用。 |
| 装饰器模式 | 通过包装而非继承的方法向对象中动态地添加或删除功能。 |
| 门面模式 | 向客户端提供使用子系统的统一接口,客户端只通过这些接口使用子系统 |
| 享元模式 | 创建管理享元实例的对象,使客户端能够共同使用这些对象 。 |
| 代理模式 | 通过实现一个代理对象来隐藏目标对象。 |
3.行为型模式
| 行为型模式 | 定义 |
|---|---|
| 责任链模式 | 将客户端请求处理的不同职责对象组成请求处理链,客户端只需要把请求交付到该链上,后续处理交给链上的对象。 |
| 命令模式 | 将类的业务行为以对象的方式封装,方便对行为的参数化,撤销、重做等需求。 |
| 解释器模式 | 创建一个对像用于表达语言语法树和封装语句解释或运算行为的对象。 |
| 迭代器模式 | 在不暴露内部结构的情况下,向客户端提供遍历聚合元素的方法。 |
| 仲裁者模式 | 把多个对象之间的耦合交互行为封装起来,从而减弱这些对象之间的耦合程度。 |
| 备忘录模式 | 在不破坏目标对象的前提下,将目标对象内部的状态保存到外部对象中,在需要恢复时使用。 |
| 观察者模式 | 当目标对象发生预想中的变化时,对这个变化进行响应或处理的对象。 |
| 状态模式 | 封装上下文对象的特定状态行为,在上下文对象改变状态的时候能够据此改变行为。 |
| 策略模式 | 把一组算法泛化成策略抽象类,他们之间可以互相替换,单个算法的变化不影响客户端的使用。 |
| 模板方法模式 | 先定义好算法中不会改变的部分,可变部分交给子类具体实现。 |
| 访问者模式 | 把聚合体中聚合元素的操作或算法封装起来,从而使它们从聚合对象中独立出来,能够自由扩展而不影响聚合对象。 |
心得体会
在游戏的开发中,我会常用到单例模式,策略模式,状态模式。玩家操控的角色在整个游戏里只有一个的情况下,我经常会使用单例模式,
这样会让我在其他类中检测角色的状态,获取游戏对象上的组件变得很方便。在武器的设计上,不同的武器可能会有不同的攻击方式,角色使用不同的武
器时需要调用不同的函数,这时候我就会使用策略模式,把所有武器的攻击模式泛化成一个策略抽象类,切换起来就很简单。在敌人的设计上,不同的情
况下,敌人需要有不同的行为动作,这时候使用状态模式就能很好的完成这一点。
刚刚初学代码开发的时候,我们都不会很在意开发模式、原则之类的东西,一方面这时候的我们需要的是能让它正确的动起来,另一方面
代码的规模也不大。随着开发规模越来越大,我们会不由自主的去规范代码的开发和设计,养成一些习惯,让代码开发更轻松。在学习、理解软件代码开
设计原则、设计模式之后,我发现那些让我觉得很舒服的代码开发习惯,在书中都能找到影子。这让我在欣喜的同时也明白了,规范化的代码开发技术,
不仅仅能够提高程序执行效率,也能够让开发过程更轻松。我相信在学习并掌握了这些软件设计原则和设计模式之后,在代码开发的路上我能走得更好、
更快、更远。

浙公网安备 33010602011771号