学习设计模式的一个硬伤

     很多人在学习设计模式,也都能把GOF书中的factory, state, singleton, decorator等等说的叽里呱啦的,但是很多人其实都不知道怎么来用设计模式,工作几年,看过一些优秀的设计,但看过的更多的是滥用模式的设计,大部分人对设计模式的了解也都停留在层面上,在工作中曾有机会去对资历年长过自己的同行进行过面试,GOF中的模式随便挑一些出来问询,模式的用途,解决的问题以及优缺点什么的,大部分都能答个八九不离十,但是再往深入点,比如问,state与strategry的区别?或者两个维度的业务变化可以用Bridge来分离,那面对大于两个维度的业务变化时呢? 对于此类稍微深入点的问题,面试者往往不知如何作答。

      或许是交际圈太窄,在现实生活中还没有接触到传说中的大牛,能够给予点播,以致往往在遇到问题时,只能闷着头颅去网络中四处寻找,然而网络中大多数人的理解显然都还是停留在理论层面,甚少有实际运用的例子,以致在某些时候,使用了模式后和使用之前没多大区别,有点画蛇添足的味道。

      举个工厂模式的例子,大多数文章都只是描述了工厂模式是什么,为什么要用,以及优缺点什么的,却唯独少了描述如何使用。比如说,工厂模式是为了封装对象的创建,降低具体产品和Client的耦合等等,大体上就是说,原先使用new Shape的地方, 换成factory创建的方式。

//使用工厂模式前,client调用的方式
Shape shape=new Circle();


//使用工厂模式后,client调用的方式
ShapeFactory factory=new CircleFactory();
Shape shape=factory.createShape();

 

    从上面的代码中,你看出了什么不对劲的地方了吗? 如果我们真的这么来使用工厂模式,那么使不使用工厂模式没有什么两样,为什么? 使用工厂模式前,client的代码依赖于具体的产品对象-Circle,使用工厂模式后,client的代码是不依赖于具体的产品对象-Circle了,但是转而依赖具体的工厂对象-CircleFactory了,依赖关系只是转移了,并没有降低。 但是这正是网上以及一些书籍中讲解工厂模式时所使用的方式,而且鲜有说明其中的缘由。这就造成了很多初学者乃至一些工作了多年的程序员都在这样使用着设计模式。

    再举个策略模式的例子,这是一个很简单的模式,但是仍然有很多人不知道策略模式还有一个Context元素,也不知道这个Context元素的作用, 既然模式里包含了这个Context,自然有它的用意。所以,对于我来讲,未能充分了解其意图之前,设计模式,还是不用为好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,内存管理和泄漏是Unity游戏开发中的一个常见问题。在Unity中,Mono运行时负责管理内存,Mono是一种跨平台的开源实现,用于C#和其他.NET语言的运行时环境。Mono的垃圾回收机制可以自动回收不再使用的对象,但是如果开发者不小心,仍然可能会发生内存泄漏。 以下是一些常见的Mono内存管理和泄漏问题: 1. MonoBehaviour对象的生命周期:MonoBehaviour是Unity游戏中最常用的组件之一,但是如果在游戏对象被销毁之前没有正确释放对其的引用,就可能会导致内存泄漏。 2. 频繁的实例化和销毁对象:在一些场景中,需要频繁地实例化和销毁对象,而如果不及时释放对这些对象的引用,就会导致内存泄漏。 3. 资源加载和释放:资源加载和释放也是一个常见的内存管理问题。如果不及时释放对已经加载的资源的引用,就会导致内存泄漏。 为了避免这些问题,开发者可以采取以下措施: 1. 使用对象池:对象池是一种常见的优化技术,它可以避免频繁地实例化和销毁对象,从而减少内存分配和垃圾回收的开销。 2. 及时释放资源:在游戏对象或场景不再需要某些资源时,应该及时释放对这些资源的引用。 3. 避免使用静态变量:静态变量会一直存在于内存中,因此应该避免过多地使用它们。 4. 使用内存分析工具:Unity提供了一些内存分析工具,可以帮助开发者找出内存泄漏的根本原因。 总之,内存管理和泄漏是Unity游戏开发中需要注意的一个重要方面,开发者应该注意这些问题并采取相应的措施来避免它们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值