(learn&think)

不浮躁,不自傲,学习,思考,总结

Programming Pearls: Column7

| Comments

Book notes

Overview

一天中密西西比河的流量是多少?

作者估算:河口宽度大约 1 mile,大约 1/250 英里深,他猜测流速是 5mile 每小时或 120mile 每天。

1mile * 1/250mile * 120 miles/day = 1/2 mile3/day

Octopress中添加目录

| Comments

目的为 Blog 加入目录,方便读者快速浏览主题和选择主题。搜索发现

文章 1 使用 jQuery 来实现,比较复杂,和 文章 2 使用 kramdown 和 Octoptress 本身的样式来生成目录。

Programming Pearls: Column2

| Comments

Book notes

A

一个文件中有 4 十亿的 32 位整数,已随机排序,如何找如一个不在这个文件中的 32 位数?有足够的内存如何解决?如果你可以用很多外部存储文件但是只有几百个字节的主内存,如何解决?

Programming Pearls: Column1

| Comments

1 Book notes

1.1 The Bitmap Data Structure

这个数据结构用来表明在有限域中的一个密集集合,当集合中每个元素最多出现一次且没有其他数据与这些元素相关。即使这些情况得不到满足(比如,当有多个相同元素或其他附加数据),一个来自有限域的键能被在一个复杂数据表中用来做索引。

设计模式基本原则

| Comments

1 封装那些改变的

识别出应用里改变的方面,然后把它们从不变部分里分离出来封装。这样变化的部分就不会影响到不变的部分。那么,之后代码改变的话,只需要修改封装好的变化部分,不引起无意的修改,并提供更好的扩展灵活性。

2 面向接口编程,而不是实现

  1. 由接口定义要实现的每个行为;
  2. 只要依照接口定义好的编程实现;
  3. 我们只需要知道接口是如何,根本不需要实现的细节而去使用这个接口派生的对象;
  4. 在运行时才赋值具体的实现对象。

3 使用组合优于继承

使用组合创建系统提高灵活性。不单单可以使你把一族的算法封装成它们各自的类,同时让你在运行时可以改变算法行为。

而继承,子类直接实现好算法的具体行为,不能在运行时改变算法的行为,同时过多的继承加剧类图的复杂度。

浅谈设计模式二十三: 访问者模式(Visitor)

| Comments

实例

一辆汽车的结构是定的,但是对方不同部件的操作确实会时常变化,比如查看汽车各个部件,发动汽车对各个部件操作或修理部件等。那么如何在不改变汽车部件类的前提下,对其定义不同的操作呢?

浅谈设计模式二十二: 备忘录模式(Memento)

| Comments

1 实例

一个对象的状态必须被存储下来以便它之后能恢复到那个状态,并且一个直接获取状态的接口将暴露实现的细节并破坏对象的封装。 那么如何不用直接获取状态的情况下,实现状态的存储和恢复呢?

浅谈设计模式二十一: 中介者模式(Mediator)

| Comments

1 实例

在公司里,有不同的职位,比如销售人员,开发人员,系统维护人员,主管等等,经常不同的人会发出不同广播消息,比如主管通知大家会议室在何时被占用,系统维护人员通知大家系统将升级 win7,因为 xp 将不再得到维护。并且公司内有不同类型的广播消息,比如公司销售会议只应该通知主管级别的人物。

有不同类型的广播消息,不同职位接收和发送不同类型的消息给相应职位的人,整个公司的交互相对复杂,如何做到以下呢?

  1. 理清和维护好现有的人员交互;
  2. 灵活的扩展不同类型广播和不同消息群组。