设计模式



这几天在看一本《 交互式程序设计
》,书中提到:

交互系统的丰富性和实现它的难度是密切相关的:交互越是丰富,越是容易出错。

这点深有体会,


越是复杂的交互,越容易造成系统的偏离



。所以, 最近我在实验的一款编辑器



努力在保持简单的交互,并保持丰富的功能。



这一条经验,其实就可以理解为一种“设计模式”。



模式



的概念来源于克里斯托佛·亚历山大的著作 《 建筑模式语言
》。该书介绍了城市设计的 “语言”, 而此类 “语言” 的基本单元就是模式。模式中可能会包含对窗户应该有多高、 一座建筑应该有多少层以及一片街区应该有多大面积的植被等信息的描述。

– 设计

设计上的设计模式,更接近于


设计规则(原则)


,如果是平面设计,如配色规则之类的;空间设计的话,就如“一池三山”此类经典空间模式;一般是可以用图纸来表达的。

– 代码


软件设计中的设计模式
是常见问题的典型解决方案。



设计模式常用于解决代码中反复出现的设计问题


。设计模式与方法或库的使用方式不同,你很难直接在自己的程序中套用某个设计模式。你需要根据模式来实现符合自己程序实际所需的解决方案。

人们经常会混淆


模式和算法


,因为两者在概念上都是已知特定问题的典型解决方案。但算法总是明确定义达成特定目标所需的一系列步骤, 而模式则是对解决方案的更高层次描述。同一模式在两个不同程序中的实现代码可能会不一样。



算法更像是菜谱


:提供达成目的的明确步骤。而


模式更像是蓝图


:你可以看到最终的结果和模式的功能,但需要自己确定实现步骤。


是不是有点像产品原型图?

设计模式,一般常用伪代码来表达。举一段javascript的代码示例单例模式:

class Mix {

  static getInstance(...arg) {

    if (!Mix.instance) Mix.instance = new Mix(arg);

      return Mix.instance;

    }

  constructor(name) {

    this.name = name;

    console.log('运行一次')

    }

  print() {

      console.log(`打印 ${this.name}`);

    }

}


var m1 = Mix.getInstance(1) var m2 = Mix.getInstance(2) var m3 = Mix.getInstance(3)
m1.print() m2.print() m3.print()

一般我们把代码的设计模式分为3种:


创建型模式

提供创建对象的机制,保持代码的灵活性和可复用性。


结构型模式

解决如何将对象和类组装成较大的结构,并同时保持结构的灵活和高效。


行为模式

负责对象间的高效沟通和任务调度。

一张图概括设计模式

– 推荐

https://refactoringguru.cn/design-patterns/python

如果你想熟练掌握设计模式,可以仔细练习网站上的代码示例。


我有个 练习代码的习惯
,我喜欢


把代码总结成示意图的方式


关注我的知识星球,查看我平时的笔记

– 思考

设计模式是一种通用的解决方案,或者是一种规律。

做设计或者写代码

(写文章)


的时候,我们应该努力做到无意识地使用设计模式。


如果是文章,我们可以利用聚类等算法,总结出文章的“ 写作套路
”,进而得出文章模板;


如果是设计作品,比如海报设计,大家可以思考下如何 通过技术手段总结出海报设计的设计模式


可通过扫码,与我深度交流
或赞赏获取微信号