Head First Design Pattern 读书笔记(1) 策略模式

Head First Design Pattern 读书笔记(1) Strategy Pattern 策略模式

这几天为了锻炼看英语文档的能力,开着有道硬着头皮看 《Head First Desgin Pattern》的原版书,顺便做下笔记,把里面提到的每个模式通过回忆的方式画出来复习并记下来总结下学习成果=。=

关于设计模式

  1. 使用设计模式是为了增强程序的复用性,拓展性,易维护性。
  2. 设计模式会增加程序代码的复杂度,并不是所有情况都必须使用设计模式,需要根据需求以及经验评估使用场景。
  3. 学习并掌握设计模式后不会大幅提高编程水平(笑),但是平常写代码时应该多用面向对象思维考虑一下。
  4. 设计模式可以让程序员之间沟通更简洁准确。(比如说,码农a:“这两个类是一对多的关系,这种调用关系应该用观察者模式”。码农b:“ok,我知道怎么搞了” 而不是balabala一大堆代码怎么写)

Strategy Pattern 类图

定义

策略模式:通过接口定义一类抽象的算法(这里的算法可以认为是某类操作或方法)集合,让这个集合下的每种算法都是独立可变化,互不影响的。策略模式使调用方可以灵活的使用某类算法集合下的各种算法。

几个OO的原测

  1. 封装变化的部分。–>总结变化与不变的地方,将变化的部分通过抽象封装出来。
  2. 尽量使用组合(has a)而不是继承(is a)。–>组合比继承更加“松耦合”,而且某些语言(如java)只能单一继承,过度使用继承,将导致程序不容易扩展,修改子类功能会动到父类等情况。
  3. 针对接口编程,而不是针对实现编程。–>接口相对于具体的某个类更加抽象,针对接口编程,可以使用多态(polymorphism)的方式让程序更加灵活,比如通过依赖注入的方式在运行时更改对象内的变量。(Spring IOC就是这么干的)
时间: 2024-10-06 01:40:15

Head First Design Pattern 读书笔记(1) 策略模式的相关文章

Head First Design Pattern 读书笔记(2) 观察者模式

Head First Design Pattern 读书笔记(2) Observer Pattern 观察者模式 Observer Pattern 类图 定义 观察者模式:在对象间定义一个一对多的关系,当其中一个的对象发生改变时,所有依赖于这个对象的对象(即观察者们)都会自动更新或做执行某些行为. 几个OO的原测 尽量以松耦合的方式处理对象间关系–>软件工程时候学的"高內聚,低耦合"的好处 关于观察者模式 被观察对象通知观察者可以使用推送的方式(类图中带参数的notifyActi

Head First Design Pattern 读书笔记(4) 单例模式

Head First Design Pattern 读书笔记(4) Singleton Pattern 单例模式 Silngleton Pattern 类图 单例模式非常简单,基本没有什么类之间的关系,就不画图了,保证某个类生成的实例只有一个即可. 定义 单例模式:只允许一个类实例化一个对象,并提供一个可以全局访问这个实例的方法(接口). 关于单例模式 最简单的单例模式实现方法是: /* *"懒汉式"写法,即等要用了再去实例化实例对象,而不是应用一启动就实例化好放在容器中. */ pu

Head First Design Pattern 读书笔记(3)装饰者模式

Head First Design Pattern 读书笔记(3) Decorator Pattern 装饰者模式 Decorator Pattern 类图 定义 装饰者模式:通过让组件类与装饰者类实现相同的接口,装饰类可以在不修改原有组件类的情况下,动态拓展组件类的新功能,并且可以无限拓展下去. 几个OO的原测 类应该对修改关闭,对拓展开放.–>"开闭原则",即尽量不要修改已经在用的类,而通过继承的方式去拓展类的新功能. 设计类时应当尽量考虑不修改原有的代码.–>同&qu

大话设计模式读书笔记2——策略模式

策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类直接的耦合. UML 图: 根据<大话设计模式>——第二章 商场促销这个案例代码来简单的记录一下策略模式的使用方式: /// <summary> /// 现金收费抽象类 /// </summary> public abstract class CashSuper { /// <summary> ///

head first 设计模式读书笔记 之 策略模式

作为一个php开发者,深知曾经很多程序员都鄙视php,为什么呢?因为他们认为php的语法是dirty的,并且由于开发者水平参差不齐导致php的代码更加乱上加乱,维护起来简直一坨shit一样.随着php加入了面向对象的阵型之后,很多开发者开始使用了oop思想来写代码,php也变得越来越标准,越来越规范.而其中,设计模式起到了不小的作用.最近老大找我谈话,说php这边的开发模块耦合度过高,代码感觉质量不高,想来一次代码重构行动.我对代码重构也是一知半解,而代码重构的基础就是去了解设计模式,于是我翻起

JavaScript设计模式与开发实践---读书笔记(5) 策略模式

策略模式的定义是:定义一系列的算法,把它们一个个封转起来,并且使它们可以相互替换. JavaScript版本的策略模式: 奖金系统: var strategies = { "S": function(salary){ return salary*4; }, "A": function(salary){ return salary*3; }, "B": function(salary){ return salary*2; } }; var calc

大话设计模式读书笔记--2.策略模式

面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类 定义 它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户 模式结构 Strategy: 定义所有支持算法的公共接口 ConcreteStrategy: 封装了具体的算法或行为,也就是具体的策略 Context:是算法对象工厂, 维护一个Strategy对象的引用, 产生具体算法对象 模式实现 场景:模拟商城收银软件,营业员根据客户所

Design Pattern 设计模式 Decorator 装饰者模式

1 设计一个基类 2 继承这个基类,并包含这个基类的一个对象 3 创建继承类的时候,初始化这个基类,因为是基类指针,所以可以是所有基类的衍生类对象,那么就可以叠加任意多个衍生类对象了. 关键是在衍生类中包含一个基类对象,然后有了继承和包含两重关系,可以使得一个类一个类对象叠加,达到装饰目的. 等于是创建了一个对象指针链表,一个一个对象发挥其相应的作用. 下面程序装饰一个桌子,同时包含释放内存的处理. 关键要知道基类的析构函数必须使用虚函数,为什么? 1 如果基类不是析构函数,那么如果衍生类中包含

Strategy Pattern ava设计模式之策略模式

简介 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式.简单理解就是一组算法,可以互换,再简单点策略就是封装算法. 意图 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换. 主要解决 在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护. 何时使用 一个系统有许多许多类,而区分它们的只是他们直接的行为. 如何解决 将这些算法封装成一个一个的类,任意地替换. 主要角色 上下文Context,