程序猿必备系列:开发者的蓝图之初探分类

导语:前天端午想着努力再更一篇,没想到被各种杂事耽搁了,先给大家补个端午安康。上一篇忙着说设计模式有多重要了,反而关于设计模式本身介绍的有点少,这一篇给大伙好好说说设计模式的到底有哪些。

这次就不扯闲篇了,直接步入正题。

上一篇说到设计模式是四人帮(GOF)当初在《设计模式-可复用的面向对象软件元素》中所提出的,书中一共有 23 种模式用来解决面向对象的程序设计中所出现的各种问题。

当时那本书中针对的语言是 C++,虽然后来设计模式也变成了 Java 语言的宠儿,但归根结底只要是面向对象的语言都有必要掌握这些套路。

像 C 语言、Shell 语言这样主推面向过程的语言,设计模式就很少站出来说话了,没办法,谁让现在主流的设计模式都是从以 Java 为主的项目经验中抽象出来的呢。

但就像之前说的,只要是能面向对象的语言,设计模式都起到了重要的作用,像 PHP、Python 这样的脚本语言也不例外,设计模式也是一个合格码农应该具备的技能。

以我最为熟悉的 Python 为例,很多人都是把它当胶水语言,确实,它用来做胶水语言是真的方便,这也导致了很多人用它的时候都是以面向过程的方式编程。

何况 Python 的入门门槛低,用起来更灵活,在项目开发中所占的比重小,多以辅助为目的,久而久之,设计模式在 Python 开发中总是不成体系(可能是我见的少了)。

但你想成为一个成熟的程序猿我觉得就绝不能忽视设计模式,具体原因还是戳我下面那篇文章好了。

将程序中的变与不变分开,你真的懂我说的是什么?

话说回来,设计模式必须要是面向对象编程才行。对于我们敲代码的程序猿来说,使用设计模式,你就不能再从上到下的一条条去累加代码了,但面向对象的好,是你将原来面向过程的代码量缩减到原先的70%,甚至更少的时候才能体会到的。

具体到语言上,Python 和 Java 还是有很多不同的,影响最大的在我看来就是 Python 是所谓的无接口类型,定义接口将完全人为规定,在编程过程更需要自我约束,灵活是灵活,但多人合作的项目总不能全靠文档说明和注释去解释你的意图吧,相信效率的不满意会让你头疼很长时间。

网上已经有很多关于 Java 设计模式的文章书籍了,但是关于 Python 的文章书籍,虽然有很多大神也都提了,但是要么说的太不具体,要么总是站的高度太高,让人摸不着头脑。而这也是我做这个系列的原因。

害,废话不多说。下面再和大家谈谈设计模式的分类。

设计模式有低有高,低到日常的习惯技巧,高到框架架构,只要追究你在编程中的填坑原因,找到其中不变的部分,都可以归到设计模式。

以现在主流的分类方法,按照设计模式的目的用途可将其分为三大类:创建型(Creational)、结构型(Structural)和行为型(Behavioral)。

下面给大伙介绍一下分类后的设计模式。

创建型模式

这个类型的设计模式提供了创建对象的机制。这让程序从根本上更具有灵活性和可复用性。

  • 单例模式(Singleton Pattern)

  • 原型模式(Prototype Pattern)

  • 工厂方法模式(Factory Method)

  • 抽象工厂模式( Abstract Factory)

结构型模式

这个类型的设计模式关注类和对象的组合,介绍了如何让类和对象在组成更大的结构同时,还具有灵活和高效的特点。

  • 装饰模式(Decorator Pattern)

  • 代理模式(Proxy Pattern)

  • 外观模式(Facade Pattern)

  • 组合模式(Composite Pattern)

  • 桥接模式(Bridge pattern)

  • 享元模式(Flyweight Pattern)

  • 适配器模式(Adapter pattern)

行为模式

这个类型的设计模式负责对象间的通信,介绍了不同对象之间是怎样交互和怎样分配职责。

  • 策略模式(Strategy pattern)

  • 状态模式(State pattern)

  • 命令模式(Command pattern)

  • 责任链模式(Chain of responsibility pattern)

  • 观察者模式(Observer pattern)

  • 备忘录模式(Memento pattern)

  • 迭代器模式(Iterator pattern)

  • 解释器模式(Interpreter pattern)

  • 中介者模式(Mediator pattern)

  • 访问者模式(Visitor pattern)

  • 模板方法模式(Template pattern)

这么算下来,也有 22 种设计模式,Python 除了上面这些设计模式还有一些不是那么常见的模式,之后我也会补充过来,大家等着就好。

结尾

相信我,只有面向对象+设计模式强强联手,才能让你的代码变得更加可维护、可复用、可扩展。
但有一点你要记在心里:设计模式本身并不关心具体的实现细节,像算法和数据结构这样的东西完全由你这个施工者决定,只有将设计模式融会贯通到脑子里才行,一定不要死扣套路,那样做只会让你的代码变得乱七八糟。
(0)

相关推荐

  • 【Python面试】 Python 的特点和优点是什么?

    最近公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开 ...

  • Python中缩进是什么?入门分享!

    众所周知,Python是一门独特的编程语言,它语法清晰.简单易学,而且Python是通过缩进来识别代码块的,因为一般的语言都是通过{}或者end来作为代码块标记. Python中缩进是什么? 要求严格 ...

  • Python和Java的六大差异!

    近年来,随着人工智能.5G时代的到来,编程语言变得更加火爆,其中Python和Java名列前茅,受到很多人的追捧.那么Python和Java有什么区别呢?我想很多人都比较好奇,接下来跟着小编来看看吧. ...

  • 你真的了解Python吗?这些必须知道

    虽然大家都知道Python是一门编程语言,但很多人对它了解的并不是很透彻,接下来小编通过这篇文章为大家介绍一下,希望对你有所帮助. 什么是Python? Python是一种解释型.面向对象.动态数据类 ...

  • Python是什么?Python入门!

    现如今,Python已经成为当下非常热门的编程语言,反超众多编程语言前辈,位居四大编程语言之一,可以应用在众多领域,因此越来越多的人都加入到Python学习大军,那么Python是什么?为什么Pyth ...

  • 当代“程序猿”必备的神器有哪些?

    "工欲善其事,必先利其器",作为一名Coder,好使的工具可以大大提高我们的开发办公效率.不同技术栈,相信使用的工具也会大大小小有一些的差距,作为一名后端程序员,下面将自己常用的私 ...

  • 牛津官方推荐的15本CS入门书,未来程序猿必备!(免费领)

    如今,具备计算机科学知识太有必要了. 许多科技企业的创始人都是计算机科学专业出身.这些并不是巧合,事实证明,一旦你掌握了计算机科学,你就拥有能为科技企业出谋划策的计算机思维. 美国劳工部预测,到202 ...

  • 产品技术人必备干货:产品开发流程(完整版)_一个有情怀的程序猿博客-CSDN博客

    产品技术人必备干货:产品开发流程(完整版) 产品技术开发流程 " 产品开发流程涉及的人员从产品经理到设计师.前端.后端等等一系列人员,这篇文章主要关于产品开发的完整流程,希望对产品技术人员有 ...

  • DayDayUp:我是CSDN开发者生态联盟成员“一个处女座的程序猿”:渡己是一种能力,渡人是一种格局

    DayDayUp:我是CSDN开发者生态联盟成员"一个处女座的程序猿":渡己是一种能力,渡人是一种格局 CSDN开发者生态联盟成员简介 问:请简单自我介绍(公司姓名职位.工作履历. ...

  • 程序员必备的思维能力:结构化思维

    在日常工作中,我们时常会碰到这样的情况,有的人讲一件事情的时候逻辑非常混乱,说了很多事情的罗列,却说不到重点.有的人写代码,本身的业务逻辑并没有多复杂,但呈现出的代码却像一堆线团,混乱不堪,无法理解. ...

  • 【赠书】程序员必备!如何深入理解计算机系统

    周末到了,本次给大家赠送3本新书,这次赠送的书籍是<深入理解计算机系统:第3版>. 这是一本什么样的书 这是一本讲解计算机软硬件系统的书,从程序员视角全面剖析其实现细节,使读者深刻理解程序 ...

  • 优秀程序员必备以下五点能力,你都符合吗?

    与30年前相比,现在互联网时代的程序员已经有了很多细分的研发方向,比如前端.后端.算法.桌面软件.人工智能等等,不同的细分方向,也都有不同的要求.但不论选择什么方向,一名优秀的程序员都应具备下面这五点 ...

  • 编程新手该如何调优程序?程序员必备性能调优利器——火焰图

    让我们回想一下,曾经作为编程新手的我们是如何调优程序的?通常是在没有数据的情况下依靠主观臆断来瞎蒙,稍微有些经验的同学则会对差异代码进行二分或者逐段调试.这种定位问题的方式不仅耗时耗力,而且还不具有通 ...

  • 程序猿和产品狗撕逼大战!什么仇什么怨?

    程序猿和产品狗撕逼大战!什么仇什么怨?不怪你也不怪我,只因为没有产品研发流程规范!还在为此事痛苦的产品经理请看过来,绝逼实用的中小型企业<产品研发流程规范>,来瞧瞧,如何处理这个苦逼的问题 ...