设计模式是告诉我们如何组织类和对象以解决某种问题。

学习设计模式,也就是学习其他开发人员的经验与智慧,解决遇到的相同的问题。

使用模式的最好方式是:把模式装进脑子,然后在设计的时候,寻找何处可以使用它们。函数,方法是代码的复用,模式是经验的复用。

继承:超类的改变是会影响所有子类的,有时候让所有的子类都具有超类的行为是不恰当的,所以继承并不总是能很好的解决问题。

接口:java的接口是不具有实现代码的,所以继承接口是无法达到代码复用的

修改软件时,寻求用一种对既有代码影响最小的方式来修改软件,是我们的想要的需求。

设计原则一:找出应用中可能需要变化之处,把他们抽取出来并“封装”,不和那些不需要变化的代码混在一起。这样代码变化引起的不经意后果变少,系统将变得更有弹性。

这个简单是原则几乎是以后每个设计模式背后的精神所在----“系统中的某部分变化不会影响其他部分”

设计原则二:针对接口编程,而不是针对实现编程。即利用多态,程序针对超类型编程。实例的行为将在运行时动态的设定。

设计原则三:多用组合,少用继承。两个类的组合,能获得适当的组合行为,同时系统也具有很大的弹性。

学完以上三个原则,获得第一个设计模式:策略模式(定义了算法族,分别封装起来,让他们直接可以互相替换,此模式让算法的变化独立于使用算法的客户)。

建立可维护的OO系统,要诀在于随时想到系统以后可能需要的变化以及应付变化的原则。

head first 设计模式第一章笔记的更多相关文章

  1. [head first 设计模式] 第一章 策略模式

    [head first 设计模式] 第一章 策略模式 让我们先从一个简单的鸭子模拟器开始讲起. 假设有个简单的鸭子模拟器,游戏中会出现各种鸭子,此系统的原始设计如下,设计了一个鸭子超类,并让各种鸭子继 ...

  2. 【php学习】PHP 入门经典第一章笔记

    第一章: php在线手册:http://php.net/manual/zh/index.php 在开始学习PHP之前,先来看一个合格的PHP程序员今后应具备哪些知识,这里只是笔者的一些总结,希望对读者 ...

  3. 《第一本docker书》- 第一章笔记

    环境: Ubuntu 14.04.2 LTS (GNU/Linux 3.16.0-30-generic i686) 第一章: 1 Docker客户端和服务器 2 Docker镜像 添加一个文件,执行一 ...

  4. javascript设计模式 第一章 灵活的javascript

    javascript 设计模式 第1章 灵活的语言--JavaScript 初级程序员接到一个验证表单功能的任务,需要验证用户名.邮箱.密码等 ** 此文章内容大部分来自 <javascript ...

  5. 路飞学城Python爬虫课第一章笔记

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...

  6. AIX系统管理员--第一章笔记

    IBM产品系列 x系类为PC服务器-- e-server x        x表示x-architecture        可自由选择运行环境,windows.linux.unix等    p系类为 ...

  7. 《pyhton语言程序设计》_第一章笔记

    章1.62 (1).python区分大小写. (2).python忽略在符号#之后的同行的内容 (3).python和matlab很相似(个人感觉) (4).章节1.91: >>>i ...

  8. 深入Linux内核架构第一章笔记

    1. Linux是多任务系统, 支持并发执行若干进程,系统同时真正运行的进程数目不超过CPU的数量,因此内核会按照时间间隔在不同进程之间切换. 2.确定那个进程运行多长时间的过程称为调度. 3.内核启 ...

  9. Ruby on Rails Tutorial 第一章笔记

    搭建开发环境 作者介绍了 Cloud9\ Coding.net 这样的云端开发环境 安装 Rails 1. 新建 rails 应用 首先,调用 rails new 命令创建一个新的 Rails 应用, ...

随机推荐

  1. Java8新特性 - Stream API

    Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找.过滤和映射数据等操作.使用Stream API对集合进行操作,就类似与使用SQL执行的数据库 ...

  2. 玩转OneNET物联网平台之MQTT服务① —— OneNetMqtt全方位调试

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  3. 使用Jersey构建图片服务器

    使用Jersey构建图片服务器 前台页面代码 <form id="jvForm" action="add.do" method="post&qu ...

  4. VS无法新建项目

    问题描述:VS无法新建项目,确定Button呈灰色状态 原因:本机未安装Framework的环境,避免此类现象,在装VS之前,先安装好Framework,再安装VS. 解决方案: 1.点击图中< ...

  5. (四)适配器Adapter

    只对简单应用进行描述.适配器与ListView配合使用可以快速生成item,效果如下例所示 一.简单模式 方式一 xml <ListView android:id="@+id/lv_t ...

  6. fenby C语言 P23

    #include <stdio.h> int main(){ int i,max,a[5]={10,5,20,31,4}; max=a[0]; for(i=0;i<5;i++) if ...

  7. Redis5源码解析-Sentinel

    简单的概念就不解释.基于Redis5.0.5 从Sentinel主函数触发 在sentinel.c文件的最后面可以发现sentinelTimer函数,这个就是Sentinel的主函数,sentinel ...

  8. 从java到python

    从java到python 从事java开发主要是web方向,这个方向已经相当成熟,基本你想开发什么样的app,总能百度出来相关的项目或者github中搜索到,你需要做的就是掌握调试的技巧,基本你能想到 ...

  9. RESTful基本概念

    文章目录 01 前言 02 RESTful的来源 03 RESTful6大原则 1. C-S架构 2. 无状态 3.统一的接口 4.一致的数据格式 4.系统分层 5.可缓存 6.按需编码.可定制代码( ...

  10. Pyinstaller打包scrapy

    环境 Windows7 Python3.65 scrapy1.74 PyInstaller3.5 创建打包脚本 在与scrapy.cfg同路径创建start.py # -*- coding: utf- ...