程序猿必备系列:开发者的蓝图之初探分类
导语:前天端午想着努力再更一篇,没想到被各种杂事耽搁了,先给大家补个端午安康。上一篇忙着说设计模式有多重要了,反而关于设计模式本身介绍的有点少,这一篇给大伙好好说说设计模式的到底有哪些。
这次就不扯闲篇了,直接步入正题。
上一篇说到设计模式是四人帮(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 除了上面这些设计模式还有一些不是那么常见的模式,之后我也会补充过来,大家等着就好。
结尾