设计模式学习汇总

本文探讨了设计模式在游戏开发中的重要性,包括创建型、结构型和行为型模式的概述,如单例、适配器、策略等。作者反思了自己在项目中的实践经验,指出设计模式如何提升代码的可读性和可维护性,并计划在未来的工作中进一步应用设计模式进行框架重构。
摘要由CSDN通过智能技术生成

什么是设计模式

  • 解决同一种类型的问题
  • 使用设计模式可以让代码结构更加清晰

面向对象开发的设计原则

  • 开放-封闭原则:尽量做到对于扩展开放,对于修改是封闭的。简而言之,面对需求,对程序的改动是通过新增代码进行的,而不是改变原来的代码。

  • 依赖倒转原则:抽象不应该依赖细节,细节应该依赖于抽象。要针对接口编程,不要对实现编程。

  • 单一职责原则: 一个对象只应该包含单一的职责,并且该职责完整的呗封装在一个类中

  • 里氏替换原则: 子类必须能够替换掉它们的父类型。一个软件实体如果使用的是一个父类的话,那么一个使用于其子类,而觉察不出父类和子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化,简单的说,子类型能够替换掉它们的父类型。

  • 接口隔离原则: 一旦接口太大,则需要将它分割成一些跟细小的接口,使用该接口的客户端仅需要知道与之相关的方法即可

  • **迪米特法则:**最少知识原则,尽量减少每个类对其它类的依赖。由于每个类尽量减少对其它类的依赖,因此。很容易使得系统的功能模块独立,相互之间不存在(或很少有)依赖关系。

  • 合成复用法则: 对应公共部分少的对象,少用继承,多用复用。

上述原则的作用,让自己设计实现出来的软件系统更加稳定,容易维护,并具有一致性。

创建型模式

  • 抽象工厂:提供一个创建一系列或相关依赖对象的接口,而无需指定具体的类。在创建了什么,谁创建,以及何时创建方面提供很大的灵活性。
  • 建造者:内部完整,.将一个复杂对象的构建与表现分离,使得同样的构建过程可以创建不同的表示。
  • 工厂方法:定义创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到子类。
  • 原型:用原型实例指定创建对象,通过原型创建新的对象。
  • 单例:独一份,有且仅有一个实例,数据共享,入口唯一。

结构型模式

  • 适配器:通过接口转化,将不能一起工作的类兼容能一起工作。后期拓展修改时常用到
  • 桥接:抽象与现实分离,使其可以独立的变化。
  • 组合:组合形成树形(部分-整体)的层次结构结构,使用户对当个对象和组合对象的使用具有一致性。
  • 装饰:动态地给一个对象添加一些额外的职责,增加功能,相比生成子类更加灵活。
  • 外观:为子系统一组接口提供一致的界面,定义高层接口,使得子系统更加容易拓展使用。让一个软件中的子系统之间的通信和相互依赖关系达到最小,具体办法就是引入一个外观对象,为子系统提供一个单一而简单的屏障。例如:利用委托设计事件机制。
  • 代理:提供代理控制对对象的访问。代理是一种原来对象的代表,其他需要与这个对象打交道的操作都是和这个代表交涉。而适配器不需要虚构出一个代表,只为应付特定的使用目的,将原来的类进行一些组合。MVC设计架构中,其它功能访问view得需要通过controller来访问,这就是代理模式得一种应用。
  • 享元:运用共享(缓存池)技术有效的支持大量细粒度的对象。减少大量对象对内存过多占用。

行为型模式

  • 观察者:定义对象之间的一种一对多的依赖关系,当一个对象发生改变时,所有依赖于它的对象都得到通知并被自动更新。
  • 模板方法:定义一个操作的算法骨架,而将一部分步骤延迟到子类中,使得可以不改变算法结构即可重定义算法的某些特定的步骤。微妙的重复出现在表面不同但是本质相同的结构或处理步骤中。
  • 命令:将一个请求封装为一个对象,从而使不同的请求对客户进行参数化;可以对请求排队或记录请求日志,以及支持可撤销的操作。
  • 职责链:使多个对象都有机会处理请求,从而避免发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,知道有一个对象处理它为止。
  • 解释器:定义某种文法,并定义一个解释器,这个解释器使用该表示类解释语言中的句子
  • 中介者:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使用耦合松散,而且可以独立地改变他们之间的交互。
  • 访问者:作用于某对象中的各元素的操作,在不改变元素的类的前提下定义元素的新操作。
  • 策略:定义一系列的算法,把它们一个个封装起来,并且使他们可以相互替换,使得算法可以独立于使用它的客户而变化。
  • 状态:定义状态接口,通过不同状态管理类处理不同状态的行为逻辑。使得状态管理更为容易

结尾

做游戏研发工作有几年了,平日里很少有总结,今年因为疫情的影响多了很多学习的时间,在学习过程中发现在工作中已经使用了很多设计模式的理念,但是未曾归纳总结。将《大话设计模式》看完之后发现以前项目中设计的游戏客户端框架有可以有完善重构的地方。之后的文章会陆续记录在项目中运用到基础框架的重构。

作为技术人员,专业能力才是第一位。处于一个必须一直学习的行业,只要还在这个行业就必须一直不断的学习总结,自我提升。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值