设计模式总结之一三五

引言

什么是设计模式(What)?

设计模式是前人实际经验的积累和总结,都是着重解决实际的问题。

学习设计模式的目的(Why)?

通过学习设计模式来提高写出的代码的可维护性、可复用性、可扩展性和灵活性。也就是说让系统能够达到“高内聚、低耦合”的状态。

怎样学习设计模式(How)?

设计模式是前人的实践经验总结出来的,六大设计原则,23种设计模式;虽然每种模式都有固定的实现方式,但是设计的原则是活的,所以在学习设计模式的过程中要有所思、有所想、有所悟,有良好的理论基础,这样我们在实际运用中才能得心应手。

       下面来说说设计模式的一、三、五:

设计模式之一

一抽象:

抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如苹果、香蕉、生梨、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。抽象化的目的是为了使复杂度降低。设计模式是面向对象编程,而面向对象编程的基础就是类的抽象化。所以要想学好设计模式,就要学好面向抽象编程的思想。

  一法则:

    迪米特法则

迪米特法则(Law of Demeter)又叫作最少知识原则(LKP,Least Knowledge Principle),就是说一个对象应当对其他对象有尽可能少的了解,类与类之间的了解的越多,关系越密切,耦合度越大,当一个类发生改变时,另一个类也可能发生变化。

    核心思想:最少依赖

    具体介绍:设计模式六大原则——迪米特法则(LOD)

设计模式之三

三大特性

    1、封装

把事物的状态和行为的实现细节封装在类中,形成一个可以重复使用的“零件”,被成千上万对其内部毫不知情的工作人员使用。

    2、继承

    “Is-a”的的关系,表示一个类是另一个类的特殊种类。

    3、多态

    不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。

 三大类别

    1、创建型模式

    处理对象的创建过程。创建型模式将类的实例是如何被创建和放在一起的这些关于具体类的的信息封装起来,创建一个公用的“零件”,也就是接口,来和外部链接,这样减少了类与类之间的紧密程度,内部完整——高内聚,与外部的连接灵活——低耦合。

    例:创建一个抽象的动物类,只知道动物类是有生命的个体,都可以进行新陈代谢和繁殖。

    2、结构型模式

    用来处理类或者对象的组合。就是描述类和对象之间怎样组织起来形成大的结构,从而实现新的功能。

    例:创建型创建了一个抽象的动物类,那么结构型模式就是对这个类进行修饰加工,加上强健的四肢,如:狮子,加上翅膀:如鹰,加上鳃:如鲤鱼。

   3、行为型模式

 用来对类或者对象怎样交互和怎样分配职责进行描述。

例:结构型模式对创建的类进行了修饰加工,而行为型模式则是赋予被修饰后的类一些特性,例:对狮子的四肢进行合理设计,从而让狮子能够在陆地上风驰电掣;对鹰的翅膀进行合理设计,让鹰能够翱翔九天;对鱼的鳃进行合理设计,让鲤鱼能够畅游海底。

  23中设计模式的具体分类:

设计模式之五

五大原则

       1、开放-闭合原则

  软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。意思就是在一个系统中,增加程序的功能时,不应该改动原有代码,只要增加新的代码即可;开闭原则是核心原则,一切的一切都围绕开闭原则展开的。

  具体介绍:设计模式六大原则——开放-闭合原则(OCP)

       2、依赖倒置原则

  细节是多变的,而抽象是相对稳定的。所以我们编程的时候要注重抽象的编程,而非细节编程。如果说开闭原则是目标,依赖倒转原则是到达"开闭"原则的手段。

  具体介绍:设计模式六大原则——依赖倒置原则(DIP)

3、里氏代换原则

  子类型必须能够替换掉他们的父类型。限制变化影响的范围。

  具体介绍:设计模式六大原则——里氏代换原则(LSP)

       4、合成/聚合复用原则

  要尽量使用合成和聚合,尽量不要使用继承。

  具体介绍:设计模式六大原则——合成/聚合复用原则(CARP)

   里氏代换原则和合成/聚合复用原则都是对开放闭合原则使用时的规范。

        5、单一职责原则

就一个类而言,应该仅有一个引起它变化的原因。通俗的说,一个类只负责一项职责。

   具体介绍:设计模式六大原则——单一职责原则(SRP)

  五大关系

  在设计模式中涉及的五种关系:依赖、关联(聚合、组合)、实现、继承,用设计模式中一张经典的图来作解释:

总结

学习设计模式的基础就是理解设计原则,我们学的所有的设计模式都离不开设计原则,都是按照一定的设计原则进行的,所以设计原则是一定要掌握的,无论你在实际项目中是否应用了设计模式,设计原则是一定要遵守的编程准则。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码农分享

工厂模式(Factory)

简单工厂和工厂方法这俩个设计模式不做详细介绍,请各位看官自行百度,有大量的解释。再次我简单引用一下其他博客主对这三种模式的理解。

8710
来自专栏Albert陈凯

Scala一个综合的案例《learn scala in half an hour》 by jeff.kit

2011年1月23号Jeff参加了珠三角技术沙龙2011年1月广州小沙龙,并在会上给大家做了一个关于Scala的分享,形式是通过一个设计好的剧本(以沙龙聚会为背...

27350
来自专栏牛客网

老虎证券 iOS一面

2@property (weak, nonatomic) id delegate;

16010
来自专栏大数据和云计算技术

Go语言入门

最近准备学点新东西,聊聊Go语言入门。 Go是google 09年推出的编程语言,Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲...

38450
来自专栏Pythonista

面向对象的软件开发

很多人在学完了python的class机制之后,遇到一个生产中的问题,还是会懵逼,这其实太正常了,因为任何程序的开发都是先设计后编程,python的class机...

13720
来自专栏领域驱动设计DDD实战进阶

关于领域对象业务逻辑中条件判断的最佳实践

这篇文章其实是大健康行业直销系统的番外篇,主要给大家讲讲如何在领域逻辑中,有效的处理业务逻辑条件判断的最佳实践问题。 大家都知道,聚合根、实体和值对象这些领域对...

31950
来自专栏腾讯Bugly的专栏

iOS内存管理:从MRC到ARC实践

对于iOS程序员来说,内存管理是入门的必修课。引用计数、自动释放等概念,都是与C语言完全不同的。搞明白这些,代码才有可能不 crash。然而就是这么牛逼的内存管...

37850
来自专栏深度学习那些事儿

学习C语言的必备书籍-从入门到精通

不同学校教材不通,大部分书都把C语言的基本内容讲出来了,不推荐谭浩强的C语言书,如果仅仅是当第一本C语言书是可以的。

52040
来自专栏逸鹏说道

重温数据结构系列随笔:数据结构的基本概念

现在项目已经踏上正轨,有不少时间可以用来学习,昨晚发现柜子里那本大学时候啃过无数遍的(数据结构 C语言版),那真的无限感叹啊,初恋女友啊,大学回忆啊都涌上心头。...

30240
来自专栏武军超python专栏

2018年8月26日python常识和各大语言发展史

今天遇到的新单词: precision  n精确度 generator n发电机,生产者,生成器

14140

扫码关注云+社区

领取腾讯云代金券