设计模式的脉络

设计模式一般是指GOF那本书引出来的名词,其应该是代码模式,而单凭模式的概念是很大的,我认为模式是一种认知总结,最大的好处就是方便交流和复用,它提供了一个组织化的框架,我所知道关于模式的东西就有GOF,架构模式,实时编程模式,还有面向模式三大卷这些书,DDD又何尝不是一种模式呢?如果一种技巧被惯用而且优雅,被大部分人接受,确实能够解决问题,这就可以认为是模式,OSIV被惯用,但是它的问题是那么的明显,所以应该是反模式。


现在,我还是只来理清设计模式的脉络,也就是代码模式,这些编写代码的模式可以增强我们和同行的交流,同时提供了程序应对变化的能力,这样我们可以“偷懒”,因为老板给的新需求,我们发现很快就改完了,然后回家陪老婆,或者去旅游。


先上大图




GOF的模式总结可以从纵向上分为两大类:类模式和对象模式,类模式在具体化时需要使用继承( extends ),对象模式在实现时使用接口,对象模式比类模式要多些,纵向上可以分为创建型,结构性和行为型,如下图



我来从纵向开始阐述这个脉络:


一、创建型


面向对象编程,核心是对象,可惜我们现在大部分程序在面向类编程,对象哪里来?因为有了对象我们才可以说面向对象,对象需要创建,new 这是一个语言上内置的创建方式,Java还有反射,在Gof模式里,有几个是用来创建对象的,所以也是最好理解的了。


(1) Prototype,直接从一个对象克隆出一个


(2) Singleton, 表示一个类只能实例化一个对象,在多线程情况下为了只得到一个对象,Java里面有个出名的双检查锁惯用法


(3) Builder 将创建复杂对象的代码与对象的表示分开,抽象了产品和产品生产过程


(4) Abstract Factory 通常用于创建产品族的时候使用,抽象了工厂和产品


(5) Factory Method 这是一个类模式,抽象了一个方法和产品,让子类来实现


二、结构型


计算机处理的对象都是离散的,离散对象我们一般要把它们安排进一个结构,线性也好,树也好,当然这是数据结构的内容,但是我们GOF模式把对象也安排了一些结构,请看下面分解


(1) Composite 将对象组织成一个树形结构,用来表示部分和整体,递归


(2)  Bridge 桥,两端中间画线,从两个维度,当然可以扩展为多个维度,那就是立交桥,这个模式将抽象和实现分离,然后动态组合


(3) Facade 抽象子系统的复杂交互,解耦客户端使用API,看过人工智能的知道,人脸背后可能是一堆数据线或者真实的人类肌肉


(4) Proxy 代理,典型的一种结构,一个对象控制另一个,客户端只能使用代理对象,这个模式非常棒,比如我们爬墙通过某个代理达到某个网站


(5) Decorator 装饰,和代理有点相似,但是这个模式是为了动态的给类添加职责,装饰完了之后的接口和原来一样的


(6) Adaptor 适配,不能改变那就适应吧,分为类适配和对象适配,类适配通过继承,对象适配通过包容,所以类适配是典型的类模式


(7) Flyweight 用得不多,为了节省内存的一种模式,如果存在某对象则直接用,不用再创建一个


三、行为型


面向对象编程,我们关注的核心就是职责分配和角色扮演,对象交互,所以行为型编程就着重对象交互,对象在交互的同时体现责任和角色,这才对象编程生机勃勃的地方。


(1) Command 命令模式,将请求或者工作单元封装到命令中,然后丢给执行者,因为命令封转状态,所可以记录日志,排队或者撤销


(2) Chain of Responsibility 责任链,将对象责任排成一行,一个一个的进行传递


(3) Mediator 中介,和我们去租房和卖方差不多,封装交互,解耦我和房东


(4) Observer 定义对象的一对多状态依赖,一个对象状态变更,自动通知对这个状态变更感兴趣的其他对象


(5) State  对象在内部状态改变之后行为也改变,强调内部状态,外界不可知


(6) Strategy  策略,抽象一种算法,解耦算法实现,非常常用的模式


(7) Visitor 访问  表示对某种对象结构的访问,在对象结构不变的情况下可以增加新的访问,只要被访问的结构接受即可,但是有个前提就是对象结构必须稳定


(8) Memento 备忘  在对象不可知的前台下捕捉对象状态,以便恢复


(9) Iterator 迭代器,不暴露实现细节,就可以顺序访问集合对象


(10) Template Method 一个需要继承的类模式,定义一个操作算法的骨架,一些步骤需要子类来实现


(11) Interpreter 定义文法,定义解释器,解释器通过文法来解释句子,编译过程用这个模式



最后,还是引用互联网上很多人共享一句话总为结尾:学张无忌练太极剑,忘记,然后活用。



 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值