首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

图形图像算法中必须要了解的设计模式(2)

图形图像算法中必须要了解的设计模式(2)

AI越来越火热,人工智能已然成风!而人工智能最重要是各种算法,因此机器学习越来越受到追捧,算法越来越被重视。

作为一个算法的研究者,写出一手高级算法当然是令人兴奋的一件事!但你是否有时会有这种感觉:

写的算法很难通用于所有的数据类型!每来一个新类型的数据,又得改一下算法,或新加一个方法来支持这种类型。

有时候多个算法需要灵活组合,甚至每个算法的顺序不一样都会产生不一样的效果;每一种组合都要为其构建一个新算法,即累又麻烦。

算法越来越多,自建的算法库也越来越庞大而难于管理;

这个时候,让你的算法具有更好通用性、拓展性就显得极为重要!因此,你必须要掌握几个重要的设计模式来解决这些问题。今天介绍一种在算法领域中应用最广泛的设计模式——策略模式

策略模式

定义一系列算法,将每个算法都封装起来,并且使他们之间可以相互替换。策略模式使算法可以独立于使用它的用户而变化。

策略模式是对算法、规则的一种封装。它具有以下的优点:

算法(规则)可自由地切换。

避免使用多重条件判断。

方便拓展和增加新的算法(规则)。

应用案例

假设有这样一个应用场景:

有一Person类,有年龄(age),体重(weight),身高(height)三个属性。现要对Person的一组对象进行排序,但并没有确定根据什么规则来排序,有时需要根据年龄进行排序,有时需要根据身高进行排序,有时可能是根据身高和体重的综合情况来排序,还有可能……

通过对这个应用场景进行分析,我们会发现,这里需要有多种排序算法,而且需要动态地在这几种算法中进行选择,在未来可能还会添加一新的排序规则……

怎样让我们的排序算法更加的灵活,以适应各种各样的排序规则呢?这里我们就要用到策略模式。来,我们一起看一下具体的代码实现吧。

源码示例:

测试代码:

输出结果:

看到这,一些熟悉Python的同学肯定要吐槽了!Python是一个简洁明了的语言,使用十几行代码就能解决的问题(如下面的实现代码),为什么要写上面这一大堆的东西。

输出的结果和上面是一模一样的,这里不再赘述。

能提出这个问题,说明你一定是带着思考在阅读!之所以还要这么写,出于以下几个原因:

设计模式是一种编译思想,他和语言没有强关联,应当适用于所有面向对象的语言。Python因为语言本身的灵活性和良好的封装性,使得其自带了很多的功能,而其他语言并没有这样的功能。也许你的算法就是用C++或者Java来写的呢!为了让熟悉其他语言的人也能看懂,这里使用了最接近面向对象思维的方式进行实现(即使你熟悉Python也可通过他来学习一种新的思维方式)。

使用Python语言本身的特性,还是难以实现一些特殊的需求,如要根据身高和体重的综合情况来排序(身高和体重的权重分别是0.6和0.4)。用策略模式就可以很方便地实现,只需要增加一个CompareByHeightAndWeight的策略类就可以,如下面代码:

使用策略模式能让我们写的算法适用于各种规则和各种对象类型,极大地提高了算法的灵活性和拓展性。

Get到技能点了吗?

想了解更多更详细的信息,或想学习更多其他设计模式,请扫描下放二维码!下一篇将继续讲解《图形图像算法中必须要了解的设计模式(3)》。

《从生活中领悟设计模式(Python)》适合具有一定编程基础又渴望提升自己编程技能的人,此课程如果武功秘籍一般力求用最通俗的语言阐述最难懂的概念;用最简单的语法实现最复杂的逻辑;用最短小的代码写出最强悍的程序!

此课程分三卷内容:

第一卷:基础篇(第01~21课),19 种常用设计模式单独章节讲解 + 剩余 4 种模式合集(会有1~2篇的篇幅);

第二卷:进阶篇(第22~24课),是基础设计模式的衍生,也是各大编程语言中非常重要而常见的种编程机制;

第三卷:经验篇(第25~27课),将会分享我对设计原则、设计模式、项目重构的经验和看法。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180706G0GZO800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券