设计模式总是学了就忘(设计模式总是学不会)

设计模式总是学了就忘(设计模式总是学不会)(1)

起因

设计模式总是学了就忘(设计模式总是学不会)(2)

设计模式的由来

设计模式总是学了就忘(设计模式总是学不会)(3)

1977 年有位美国著名建筑大师提出,他叫Christopher Alexander(克里斯托弗.亚历山大)。他拥有剑桥大学数学硕士学位和建筑学学士学位,以及哈佛大学建筑学博士学位,有“模式它爹”的称号。

设计模式总是学了就忘(设计模式总是学不会)(4)

1990 年,软件工程界开始研讨设计模式的话题。1994 年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ralph Johnson)、约翰·威利斯迪斯(John Vlissides)等 4 位作者合作出版了《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)一书。

设计模式总是学了就忘(设计模式总是学不会)(5)

在本教程中收录了 23 个设计模式,这是设计模式领域里程碑的事件,导致了软件设计模式的突破。

设计模式总是学了就忘(设计模式总是学不会)(6)

这 4 位作者在软件开发领域里也以他们的“四人组”(Gang of Four,GoF)匿名著称。

设计模式总是学了就忘(设计模式总是学不会)(7)

什么是设计模式?

简单来说就是一本编程界的如来神掌。

设计模式总是学了就忘(设计模式总是学不会)(8)

它能提高程序员的思维能力、编程能力和设计能力。

它是解决特定问题的一系列套路,有一定的普遍性。

它是一套被反复使用、多数人知晓的、代码设计经验的总结。

它可以提高代码的可重用性、代码的可读性和代码的可靠性以及可扩展性。

它能使程序设计更加标准化,使软件开发效率大大提高,从而缩短软件的开发周期

是它是它就是它,编程界的武林秘籍,绝世高手都练过它!

设计模式总是学了就忘(设计模式总是学不会)(9)

设计模式的分类

模式一共分为3种不同类型的模式。

创建型模式(Creational patterns)

提供对象创建机制,增加现有代码的灵活性和重用。

结构型模式(Structural patterns)

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

行为型模式(Behavioral patterns)

负责有效的沟通和对象之间的责任分配。

设计模式总是学了就忘(设计模式总是学不会)(10)

别问为什么是粉红色

设计模式总是学了就忘(设计模式总是学不会)(11)

设计模式的七大原则

单一职责原则 (Single Responsibility Principle, SRP)

含义:一个类只负责一个功能领域中的相应职责。

栗子:就像一家公司,团队中每个人都分工明确。有产品经理,项目经理,技术经理,QA经理等等。

设计模式总是学了就忘(设计模式总是学不会)(12)

好处:降低类复杂性降低,提高代码可读性,提高可维护性。

设计模式总是学了就忘(设计模式总是学不会)(13)

开闭原则 (Open-Closed Principle, OCP)

含义:软件模块应该对扩展开放,对修改关闭。在程序需要进行新增功能的时候,不能去修改原有的代码,而是新增代码。

栗子:就像插座一样,可以给很多不同的电器充电,但是不需要改变插座本身,只要提前把插头的规格定义好。

设计模式总是学了就忘(设计模式总是学不会)(14)

好处:为了使程序的扩展性好,易于维护和升级。

设计模式总是学了就忘(设计模式总是学不会)(15)

里氏代换原则 (Liskov Substitution Principle, LSP)

含义:子类可以扩展父类的功能,但不能改变父类原有的功能。

栗子:正好今天请我去吃小龙虾,那就说说虾,它是一种食品。虾的衍生类很多有南极红虾、青虾、河虾、草虾、对虾、明虾、龙虾等,如果衍生类替换了基类的原本方法,如把食品改成了体育用品(那么软件的基本功能受到影响),就不符合里氏代换原则。

设计模式总是学了就忘(设计模式总是学不会)(16)

好处:对实现抽象化的具体步骤的规范。

设计模式总是学了就忘(设计模式总是学不会)(17)

依赖倒转原则 (Dependence Inversion Principle, DIP)

含义:高层模块不应该依赖低层模块,二者都应该依赖其抽象。针对接口编程,而不是针对实现编程。

栗子:以电脑为例,无论主板、CPU、内存、硬件都是在针对接口设计的,如果出现某个局部的配件坏了就只要替换对应的配件就行了。如果针对实现来设计,那么电脑显示屏坏了就需要把主机也一并换掉。

设计模式总是学了就忘(设计模式总是学不会)(18)

好处:降低模块间的耦合。

设计模式总是学了就忘(设计模式总是学不会)(19)

接口隔离原则 (Interface Segregation Principle, ISP)

含义:使用多个隔离的接口,比使用单个接口要好,将臃肿庞大的接口拆分成更小的接口。

栗子:假设要设计操控机器人的借口,不能只有行动和停止的接口,行动可以拆分成前进,后退,转向,跳跃,等等,接口拆分可以使组合更多。

设计模式总是学了就忘(设计模式总是学不会)(20)

好处:提高系统的灵活性和可维护性。

设计模式总是学了就忘(设计模式总是学不会)(21)

合成复用原则 (Composite Reuse Principle, CRP)

含义:就是能用合成/聚合的地方,绝不用继承。尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。

栗子:汽车按“动力源”划分可分为汽油汽车、电动汽车等;按“颜色”划分可分为白色汽车、黑色汽车和红色汽车等。如果同时考虑这两种分类,其组合就很多。

设计模式总是学了就忘(设计模式总是学不会)(22)

好处:提高灵活性,降低类与类之间的耦合度。

设计模式总是学了就忘(设计模式总是学不会)(23)

迪米特法则 (Law of Demeter, LoD)

含义:又叫最少知道原则,一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

栗子:智能音箱,只需要把指令告诉智能音箱,智能音箱就会识别指令去调用各种已链接的电器,如:我要看湖南卫视,把空调温度低一点,扫地机器人开启清扫,等等。智能音箱帮我们解决了要找很多遥控器的烦恼。

设计模式总是学了就忘(设计模式总是学不会)(24)

好处:降低类之间的耦合,减少对其他类的依赖。

设计模式总是学了就忘(设计模式总是学不会)(25)

新手误区

不合理的使用,这个问题很多刚学习的新手都会犯。

就像你手里有一把锤子,所有东西看上去都像钉子。

要对设计模式的使用场景有一定的认识后才使用,不要滥用。

如:输出一句“hello world”,非要强行给加上各种模式。

问:“为什么”,答:“总感觉少了模式!”。

设计模式总是学了就忘(设计模式总是学不会)(26)

有以上症状的,基本可以判断中了模式的毒。

总结

本次主要学习了:

设计模式的由来,从建筑而来。

设计模式是什么,大佬的套路。

设计模式的分类,有三大分类。

设计模式的原则,有七大原则。

敲黑板:切记模式虽好,可不要滥用哦。

今日问题:

为什么思维导图是粉红色?

设计模式总是学了就忘(设计模式总是学不会)(27)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页