[知识池]彻底了解设计模式(系列一)

学习时间:8.21号--8.31号

学习目标:

1、彻底搞明白常用的设计模式

2、针对常用的设计模式搭建常用的代码示例

3、挑出当前哪些工作场景可以用哪些设计模式来解决(至少2个案例)

设计模式概述(一)

每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的成功的解决方案,无须再重复相同的工作。这个定义可以简单地用一句话表示:模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。

简单理解就是人们在解决重复出现问题的一套解决方案。比如针对这种场景就可以采用这种模式来解决。

软件模式是在软件开发中某些可重现问题的一些有效解决方法,软件模式的基础结构主要由四部分构成,包括问题描述【待解决的问题是什么】、前提条件【在何种环境或约束条件下使用】、解法【如何解决】和效果【有哪些优缺点】,如图1-1所示


软件模式与具体的应用领域无关,也就是说无论你从事的是移动应用开发、桌面应用开发、Web应用开发还是嵌入式软件的开发,都可以使用软件模式。无论是在大型API或框架(如JDK、.net Framework等)、轻量级框架(如Struts、Spring、 Hibernate、JUnit等)、还是应用软件的开发中,设计模式都得到了广泛的应用。

表1 常用设计模式一览表(GOF的23种常见的设计模式)

类型模式名称学习难度使用频率
创建型模式 Creational Pattern单例模式 Singleton Pattern★☆☆☆☆★★★★☆
创建型模式 Creational Pattern简单工厂模式 Simple Factory Pattern★★☆☆☆★★★☆☆
创建型模式 Creational Pattern工厂方法模式 Factory Method Pattern★★☆☆☆★★★★★
创建型模式 Creational Pattern抽象工厂模式 Abstract Factory Pattern★★★★☆★★★★★
创建型模式 Creational Pattern原型模式 Prototype Pattern★★★☆☆★★★☆☆
创建型模式 Creational Pattern建造者模式 Builder Pattern★★★★☆★★☆☆☆
结构型模式 Structural Pattern适配器模式 Adapter Pattern★★☆☆☆★★★★☆
结构型模式 Structural Pattern桥接模式 Bridge Pattern★★★☆☆★★★☆☆
结构型模式 Structural Pattern组合模式 Composite Pattern★★★☆☆★★★★☆
结构型模式 Structural Pattern装饰模式 Decorator Pattern★★★☆☆★★★☆☆
结构型模式 Structural Pattern外观模式 Façade Pattern★☆☆☆☆★★★★★
结构型模式 Structural Pattern享元模式 Flyweight Pattern★★★★☆★☆☆☆☆
结构型模式 Structural Pattern代理模式 Proxy Pattern★★★☆☆★★★★☆
行为型模式 Behavioral Pattern职责链模式 Chain of Responsibility Pattern★★★☆☆★★☆☆☆
行为型模式 Behavioral Pattern命令模式 Command Pattern★★★☆☆★★★★☆
行为型模式 Behavioral Pattern解释器模式 Interpreter Pattern★★★★★★☆☆☆☆
行为型模式 Behavioral Pattern迭代器模式 Iterator Pattern★★★☆☆★★★★★
行为型模式 Behavioral Pattern中介者模式 Mediator Pattern★★★☆☆★★☆☆☆
行为型模式 Behavioral Pattern备忘录模式 Memento Pattern★★☆☆☆★★☆☆☆
行为型模式 Behavioral Pattern观察者模式 Observer Pattern★★★☆☆★★★★★
行为型模式 Behavioral Pattern状态模式 State Pattern★★★☆☆★★★☆☆
行为型模式 Behavioral Pattern策略模式 Strategy Pattern★☆☆☆☆★★★★☆
行为型模式 Behavioral Pattern模板方法模式 Template Method Pattern★★☆☆☆★★★☆☆
行为型模式 Behavioral Pattern访问者模式 Visitor Pattern★★★★☆★☆☆☆☆

作为设计模式的忠实粉丝和推广人员,在正式学习设计模式之前,我结合多年的模式应用和教育培训经验与大家分享几点个人的看法,以作参考:

(1) 掌握设计模式并不是件很难的事情,关键在于多思考,多实践,不要听到人家说懂几个设计模式就很“牛”,只要用心学习,设计模式也就那么回事,你也可以很“牛”的,一定要有信心。

(2) 在学习每一个设计模式时至少应该掌握如下几点:这个设计模式的意图是什么,它要解决一个什么问题,什么时候可以使用它;它是如何解决的,掌握它的结构图,记住它的关键代码;能够想到至少两个它的应用实例,一个生活中的,一个软件中的;这个模式的优缺点是什么,在使用时要注意什么。当你能够回答上述所有问题时,恭喜你,你了解一个设计模式了,至于掌握它,那就在开发中去使用吧,用多了你自然就掌握了。

(3) “如果想体验一下运用模式的感觉,那么最好的方法就是运用它们”。正如在本章最开始所说的,设计模式是“内功心法”,它还是要与“实战招式”相结合才能够相得益彰。学习设计模式的目的在于应用,如果不懂如何使用一个设计模式,而只是学过,能够说出它的用途,绘制它的结构,充其量也只能说你了解这个模式,严格一点说:不会在开发中灵活运用一个模式基本上等于没学。所以一定要做到:少说多做

(4) 千万不要滥用模式,不要试图在一个系统中用上所有的模式,也许有这样的系统,但至少目前我没有碰到过。每个模式都有自己的适用场景,不能为了使用模式而使用模式?【怎么理解,大家自己思考,微笑】,滥用模式不如不用模式,因为滥用的结果得不到“艺术品”一样的软件,很有可能是一堆垃圾代码。

(5) 如果将设计模式比喻成“三十六计”,那么每一个模式都是一种计策,它为解决某一类问题而诞生,不管这个设计模式的难度如何,使用频率高不高,我建议大家都应该好好学学,多学一个模式也就意味着你多了“一计”,说不定什么时候一不小心就用上了,微笑。因此,模式学习之路上要不怕困难,勇于挑战,有的模式虽然难一点,但反复琢磨,反复研读,应该还是能够征服的。

(6) 设计模式的“上乘”境界:“手中无模式,心中有模式”。模式使用的最高境界是你已经不知道具体某个设计模式的定义和结构了,但你会灵活自如地选择一种设计方案【其实就是某个设计模式】来解决某个问题,设计模式已经成为你开发技能的一部分,能够手到擒来,“内功”与“招式”已浑然一体,要达到这个境界并不是看完某本书或者开发一两个项目就能够实现的,它需要不断沉淀与积累,所以,对模式的学习不要急于求成

(7) 最后一点来自GoF已故成员、我个人最尊敬和崇拜的软件工程大师之一John Vlissides的著作《设计模式沉思录》(Pattern Hatching Design Patterns Applied):模式从不保证任何东西,它不能保证你一定能够做出可复用的软件,提高你的生产率,更不能保证世界和平,微笑。模式并不能替代人来完成软件系统的创造,它们只不过会给那些缺乏经验但却具备才能和创造力的人带来希望。

参考文档

https://gof.quanke.name/ 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值