美文网首页设计设计模式程序员
Head First 设计模式——总结

Head First 设计模式——总结

作者: konishi5202 | 来源:发表于2019-01-08 12:02 被阅读41次

一、OO基础

以往是代码复用,现在是经验复用!

良好的OO设计必须具备可复用、可扩充、可维护三个特性。

模式不是代码,而是针对设计问题的通用解决方案。

大多数的模式和原则,都着眼于软件变化的主题。

模式是被“发现的”,而不是被“创建的”。

将你的思绪集中在设计本身,而不是在模式上。我们的目标是简单,只有真正需要时才使用模式。

面向对象设计包含抽象、封装、继承、多态四大特性。

抽象:抽象是提取现实世界中某事物的关键特性,为该事物构建模型的过程。对同一事物中不同的需求下,需要提取的特性可能不一样。得到的抽象模型中一般包含:属性(数据)和操作(行为)。这个抽象模型我们称之为类,通过对类进行实例化得到具体的对象。

封装:封装可以使类具有独立性和隔离性,从而保证类的高内聚。只暴露给类外部或者子类必须的属性和操作。类封装的实现依赖类的修饰符(public、protected和private)。

继承:继承是对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含类的继承和接口的实现。常见的继承方法有共有继承、私有继承、多重继承、多层继承。

多态:多态是中继承的基础上实现的。多态的三个要素:继承、重写和父类引用指向子类的对象。父类引用指向不同的子类对象时,调用相同的方法,呈现出不同的行为;就是类的多态性。多态还可分为编译时多态(静态多态性)和运行时多态(动态多态性)。另外类的函数重载、运算符重载,也可算为多态的特性。

二、OO原则

封装变化:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

针对接口编程,不要对实现编程:针对接口编程真正的意思是针对超类型(supertype)编程,这样可以在运行时才指定具体实现的对象。

多用组合,少用继承:使用组合建立系统具有很大的弹性,不仅可将算法族封装成类,更可以“在运行时动态地改变行为”,只要组合的行为对象符合正确的接口标准即可。

为了交互对象之间的松耦合设计而努力:松耦合的设计之所以能让我们建立有弹性的OO系统,能够应付变化,是因为对象之间的互相依赖降到了最低。

类应该对扩展开放,对修改关闭:我们的目标是允许类容易扩展,在不修改现有代码的情况下,就可搭配新的行为。这样的设计具有弹性可以应对改变,可以接受新的功能来应对改变的需求。

赖倒置原则(Dependency Inversion Principle):要依赖抽象,不要依赖具体类依。

最少知识原则:只和你的密友谈话。

好莱坞原则:别调用(打电话给)我们,我们会调用(打电话给)你。

单一责任原则:一个类应该只有一个引起变化的原因。

三、OO模式

3.1 模式简介

一句话描述各设计模式:

  • 命令:封装请求称为对象;
  • 外观:简化一群类的接口;
  • 单件:确保有且只有一个对象被创建;
  • 代理:包装对象,以控制对此对象的访问;
  • 组合:客户用一致的方式处理对象集合和单个对象;
  • 状态:封装了基于状态的行为,并使用委托在行为之间切换;
  • 策略:封装可以互换的行为,并使用委托来决定要使用哪一个;
  • 适配器:封装对象,并提供不同的接口;
  • 观察者:让对象能够在状态改变时被通知;
  • 装饰者:包装一个对象,以提供新的行为;
  • 迭代器:在对象的集合之中游走,而不暴露集合的实现;
  • 模板方法:由子类决定如何实现一个算法中的步骤;
  • 工厂方法:由子类决定要创建的具体类是哪一个;
  • 抽象工厂:允许客户创建对象的家族,而无需指定他们的具体类;

3.2 模式分类

GoF将模式的分类:创建型、行为型和结构型:

image

注意:怎么分类不重要,重要的是了解这些模式和它们之间的关系

3.3 模式描述及类图

策略模式——定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

image

观察者模式——定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

image

装饰者模式——动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

image image

简单工厂模式——由工厂类(SimplePizzaFactory)来处理对象的创建,客户类(PizzaStore)负责产品(Pizza)的制作。

image

工厂方法模式——由工厂超类(PizzaStore)来处理对象的使用,工厂子类(NYPizzaStore、ChicagoPizzaStore)处理对象(Pizza)的创建。工厂方法让类把实例化推迟到子类。

image

抽象工厂模式——提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

image image

单件模式——确保一个类只有一个实例,并提供一个全局访问点。

image

命令模式——将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作(命令模式将动作请求与动作执行解耦)。

image

适配器模式——将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

image

外观模式——提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

image

模版方法模式——在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

image

迭代器模式——提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

image

组合模式——允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。

image image

状态模式——允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

image

代理模式——为另一个对象提供一个替身或占位符以控制对这个对象的访问。

image

MVC复合模式——模型利用“观察者”让控制器和视图可以随最新的状态改变而更新;视图和控制器则实现了“策略模式”,控制器是视图的行为,如果你希望有不同的行为,可以直接换一个控制器;视图内部又使用“组合模式”来管理窗口、按钮以及其他显示组件。

image image image

Model 2复合模式——Model 2是MVC在Web上的应用。

image image

相关文章

  • 2018-12-11

    head first html css word书籍 http权威指南 head first设计模式

  • 好书推荐

    1、主要讲23种设计模式《Head First设计模式》

  • 设计模式总结

      看完《Head First设计模式》一书,本篇算是对设计模式做一个简单的总结。 一、为什么要使用设计模式   ...

  • Head First 设计模式——总结

    一、OO基础 以往是代码复用,现在是经验复用! 良好的OO设计必须具备可复用、可扩充、可维护三个特性。 模式不是代...

  • 码仔漫画|重学设计模式之装饰者模式

    码仔带你学习设计模式 总结 出自《Head first 设计模式》 PS: 内容是我之前写过的,改成了漫画的形式。...

  • 设计模式--策略模式

    ps:本文主要来源于Head First 设计模式(抄Head First的),如有不懂请购买原书观看。 策略模式...

  • 设计模式:如何优雅地使用责任链模式

    责任链模式(Chain of Responsibility Pattern)在《Head First设计模式》一书...

  • Head First设计模式——装饰者模式

    本文是阅读 Head First 设计模式——装饰者模式的总结。这本书的教学模式很不错,个人很喜欢,由实际的案例由...

  • Swift设计模式-目录

    推荐图书:《Head First设计模式》《大话设计模式》《设计模式之禅》, 设计模式思维导图 图形说明一切: 设...

  • head first 设计模式

    最近一段时间一直在看head first 设计模式,感触颇深,遂把其中之心得记录之,以便遗忘时重新熟悉。 6种设计...

网友评论

    本文标题:Head First 设计模式——总结

    本文链接:https://www.haomeiwen.com/subject/ueyvrqtx.html