在 面向未来的产品经理要懂哪些技术 一文中提到产品经理要理解设计模式,但设计模式本身是一个偏技术的概念,不太容易理解。为此,本文会通过简单易懂的例子,让不太懂技术的产品经理也能快速上手设计模式,并应用到实际的功能设计中。
何为设计模式
设计模式其实是一个有一定年头的概念了,最初其实是出现在建筑领域的。1995 年 GoF(Gang of Four) 合作出版了《设计模式:可复用面向对象软件的基础》被认为是软件设计模式的里程碑事件。历经二十多年的业界发展,回过头来看书中收录的 23 中设计模式,依然不过时。
设计模式的定义很多,用人话来说就是经典的面向对象代码设计套路。所谓经典,就是源自大量的开发实践,在不断踩坑填坑中摸索出来的最佳方法。
思考题 1:你知道什么是面向对象吗?
功能最终是由代码实现的,而代码的组织可以参考设计模式,那么是不是意味着功能设计也存在着某种设计模式?这种设计模式有没有可能和软件工程中的设计模式有相通的地方?
没有答案也不要紧,接下来的各个章节就会围绕着这两个问题展开。实话实说,这两个问题其实并没有标准答案,以下都是我个人的浅薄理解,希望起到抛砖引玉的作用。
思考题 2:你知道正确运用设计模式对程序员来说有什么好处吗?
参考解答:设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。正确使用设计模式具有以下优点。
- 可以提高程序员的思维能力、编程能力和设计能力。
- 使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
- 使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。
思考题 3:软件设计模式是面向机器的,迁移到面向用户的话,有哪些点是需要特别注意的?
长话短说 23 种设计模式
为了给各位产品经理一个大致的理解,这里力图用一句话来通俗(但不精准)来说明每种模式的核心思想,方便后面根据需要进行查找和深入研究:
创建型模式:描述如何创建对象,核心原则是将对象的创建与使用分离。对应到产品中的功能,就是如何创建和添加新的条目。
- 单例(Singleton)模式:Windows 系统中只能打开一个任务管理器。任务管理器是单例。
- 原型(Prototype)模式:写周报的时候会把之前的周报复制一次,然后再进行修改和调整。上一周的周报就是原型。
- 工厂方法(Factory Method)模式:赛车游戏中可以自由选择不同品牌的不同性能的赛车。
- 抽象工厂(AbstractFactory)模式:自动售货机只要选择了产品,点确定就会自动出来所需要的产品。
- 建造者(Builder)模式:通过组装 CPU、主板、内存、硬盘拼出一台可以运行的计算机。
思考题 4:创建型模式对产品设计有何启发和影响?
结构型模式:描述如何将对象组合成更大的结构。对应到产品中就是如何有机组合系统中的各个功能。
- 代理(Proxy)模式:通过黄牛抢演唱会门票,黄牛就是代理。
- 适配器(Adapter)模式:需要通过读卡器来访问 SD 卡里面的照片,读卡器就是适配器。
- 桥接(Bridge)模式:快餐店里的 10 元 2 肉 1 菜,具体肉和菜可以自由组合。
- 装饰(Decorator)模式:给手机装上一个手机壳,手机壳就是一个装饰。
- 外观(Facade)模式:自己做饭需要买菜洗菜切菜炒菜洗碗,去饭店吃饭只要点菜即可,饭店把买菜洗菜切菜炒菜洗碗等细节隐藏起来,就是外观(注:这个翻译比较怪,但已经约定俗成了)
- 享元(Flyweight)模式:每个甜筒都有底座,只有挤出来的雪糕不一样,这里相同的底座就是享元
- 组合(Composite)模式:公司里分部门,部门里分小组,可以统一进行管理
思考题 5:结构型模式对产品设计有何启发和影响?
行为型模式:描述对象之间如何协作完成复杂任务,如何分配职责。对应到产品中就是如何将各个系统功能串起来,并最终解决用户的需求。
- 模板方法(TemplateMethod)模式:写简历、周报等都有模板。
- 策略(Strategy)模式:我要从深圳到广州,可以选择自己开车、做大巴、坐高铁,不同的方式就是策略,但都能完成任务
- 命令(Command)模式:我们可以用遥控器上的按钮控制电视,这里按钮就是具体的命令。
- 职责链(Chain of Responsibility)模式:TAPD 中完成自己任务后流转给其他人,就是一个职责链
- 状态(State)模式:扫地机器人在有电的时候正常工作,快没电的时候自己去找充电桩,不同状态有不同行为
- 观察者(Observer)模式:微博上你关注的博主发了新消息,你也会收到通知
- 中介者(Mediator)模式:项目对接双方都有一个接口人,通过接口人完成对接,不必关注具体每个项目的参与人,接口人就是中介
- 迭代器(Iterator)模式:字典后面可以根据拼音检索也可以根据笔画检索,不同的检索方式就是迭代器
- 访问者(Visitor)模式:筷子可以用来吃饭,也可以用来开瓶盖,同一个东西可以有不同的用法。
- 备忘录(Memento)模式:常用的撤销、重做功能。
- 解释器(Interpreter)模式:SQL 语言可以看做是数据库数据的解释器
思考题 6:行为型模式对产品设计有何启发和影响?
从软件设计模式到产品设计模式
面向对象设计是软件工程的一大进步,开发人员得以用更加贴近生活的类比方式进行开发,但毕竟是和机器打交道,所以依然会有设计上的复杂度,这才有了各种设计模式。
不过既然面向对象源自生活中的概念抽象,那么关键点在于观察生活,让产品的功能设计更加贴近大家的认知,再结合这些认知总结出来的软件设计模式,就是一个完整的闭环了。
思考题汇总
这一部分可以用于最后的查漏补缺。
- 你知道什么是面向对象吗?
- 你知道正确运用设计模式对程序员来说有什么好处吗?
- 软件设计模式是面向机器的,迁移到面向用户的话,有哪些点是需要特别注意的?
- 创建型模式对产品设计有何启发和影响?
- 结构型模式对产品设计有何启发和影响?
- 行为型模式对产品设计有何启发和影响?