我们全都使用别人设计好的库与框架。我们讨论库与框架、利用他们的API编译成我们的程序、享受运用别人的代码所带来的长处。看看java api它所带来的功能:网络、GUI、IO等。库与框架长久以来,一直扮演着软件开发过程的重要角色,我们从中挑选所要的组件,把他们放进合适的地方。可是,库与框架无法帮助我们将应用组织成easy了解、easy维护、具有弹性的架构,所以要设计模式。
设计模式不会直接进入你的代码中,而是先进入你的“大脑”中。一旦你先在脑海中装入了很多关于模式的知识,就行開始新设计中採用它们,并当你的旧代码变得如同搅和成一团没有弹性的意大利面一样时,可以用它们重做旧代码。————题记

面向对象的设计原则
(1)找出应用中可能须要变化之处,把它们独立出来,不要和那些变化的代码混在一起。————封装变化
也即把变化的部分取出来并封装起来,以便以后能够轻而易举地修改或者扩充此部分,而不影响不须要变化的其它部分。
(2)针对接口编程,而非针对实现编程————
“针对接口编程”,关键在于多态。利用多态,程序能够针对超类型编程,运行时会依据实际状况运行到真正的行为,不会被绑死在超类型的行为上。“针对超类型编程”这句话能够更明白的说成是变量的声明类应该是超类型,一般是一个抽象类或者一个接口,如此,仅仅要是详细实现此超类型的类所产生的对象,都能够指定给这个变量。也就意味着,声明类时不用理会以后运行时的真正对象类型。
(3)多用组合,少用继承。
通过组合建立系统具有非常大的弹性,不仅可将算法族封装成类,还能够“在执行时动态改变行为”,仅仅要组合的行为对象符合正确的接口标准就可以。
继承的缺点:
1、代码在多个子类中反复,由于全部子类须要覆盖父类的抽象方法;
2、子类执行时不easy改变状态,由于没有setter方法;
3、非常难知道所有子类的所有行为;
4、改变牵一发而动全身,造成其它子类不想要的改变。

要点
知道OO基础,并不足以让你设计出良好的OO系统。
良好的OO设计必须具备可复用、可扩充、可维护三个特性。
模式不是代码,而是针对设计问题的通用解决方式。

设计模式
(1)策略模型:定义了算法族,分别封装起来,让他们之间能够互相替换,此模式让算法的变化独立于使用算法的客户。

复习一下抽象的几个概念:
1、抽象方法abstract,父类的抽象方法主要作用为占位,由子类来实现;
2、为了提高清晰度,包括一个或多个抽象方法的类本身必须声明为抽象类;
3、类即使不包括抽象方法,也能够声明为抽象类;
4、抽象类不能被实例化。

public abstract class duck {

    FlyBehavior flybehavior;
QuackBehavior quackbehavior;
public duck(){
} //抽象类
public void abstract display(); public void performFly() {
flybehavior.fly();
} public void performQuack() {
quackbehavior.quack();
} public void swim() {
System.out.println("All ducks float, even decoys.");
} //设定动态行为
public void setFlyBehavior(FlyBehavior fb) {
flybehavior = fb;
} public void setQuackBehavior(QuackBehavior qb) {
quackbehavior = qb;
}
} public interface Flybehavior {
public void fly();
} public interface Quackbehavior {
public void quack();
}

《Head First 设计模式》学习笔记——策略模型的更多相关文章

  1. C#设计模式学习笔记-单例模式随笔

    最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整 ...

  2. 设计模式学习笔记--备忘录(Mamento)模式

    写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方式,这就是软件模式:每个模式描写叙述了一个在我们程序设计中常常发生的问题,以及该问题的解决方式:当我们碰到模 ...

  3. C#设计模式学习笔记-单例模式(转)

    C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到 ...

  4. Java设计模式学习笔记(二) 简单工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...

  5. Java设计模式学习笔记(三) 工厂方法模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 简介 上一篇博客介绍了简单工厂模式,简单工厂模式存在一个很严重的问题: 就是当系统需要引入 ...

  6. Java设计模式学习笔记(四) 抽象工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...

  7. Java设计模式学习笔记(五) 单例模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 使用单例模式的原因 以Windows任务管理器为例,在Windows系统中,任务管理器是唯 ...

  8. 7 种 Javascript 常用设计模式学习笔记

    7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...

  9. C#设计模式学习笔记:(3)抽象工厂模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7596897.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式( ...

  10. C#设计模式学习笔记:(2)工厂方法模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7567880.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式( ...

随机推荐

  1. 动态规划面试题基础合集1--数学三角形,LIS , LCS, CSD

    动态规划的一般思路是分为四步,即:寻找最优子结构.递归定义最优子结构.自底向上求解最优子结构和构造最优解. 接下来我列举出几个常见的动态规划面试题进行说明. (1)数学三角形:比较简单,直接贴一个我看 ...

  2. centos7上使用locate命令

    https://blog.csdn.net/yqh19880321/article/details/72426879

  3. input文本框 输入限制三则

    其一,只允许输入数字和小数点. <input onKeypress="return (/[\d.]/.test(String.fromCharCode(event.keyCode))) ...

  4. 【社区公益】送《Web前端开发最佳实践》给需要的人

    算起来至今,我进入软件开发行业已经有11年之久.从最初的研究人工智能,到后来的Web开发,控件开发,直到现在纯粹的Web前端开发.虽然没有大的作品问世,但也是勤勤恳恳,踏实做事,低调做人.从来不吹牛逼 ...

  5. Kylin使用笔记-1: 安装

    2016年1月14日 9:57:23 星期四 背景介绍     Apache Kylin是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最 ...

  6. 成功实施的APS项目故事分享---如何管理与激励APS项目团队

    故事背景 A企业是易普优APS重要客户之一,是某行业的龙头企业:APS项目历时7个月顺利上线,十个月验收!通过易普优APS的顺利实施,建成了集团的精益计划管控运营平台,树立计划的权威与指挥棒作用,让物 ...

  7. Django实战(8):对比RoR与Django的输入校验机制

    rails有一个”简洁.完美的验证机制,无比强大的表达式和验证框架“.在<Agile Web Development with Rails 4th>一书的7.1节向我们展示了如何验证Pro ...

  8. strings.xml显示html格式

    需求:合同协议,其中指定内容为红色 效果图: 实现如下: <string name="learn_ticket_agreement" formatted="fals ...

  9. String 的常用操作

    String 类,我可以不负责的说在 Java 中这个类应该是使用最频繁的类了.然而关于它的常用的操作,我却不甚了解.整理这个东西很反人性的,这些方法,你看到他的时候感觉很简单,但是真正用的时候还是不 ...

  10. python3.6 利用requests和正则表达式爬取猫眼电影TOP100

    import requests from requests.exceptions import RequestException from multiprocessing import Pool im ...