设计模式之Decorator(油漆工)
装饰模式 Decorator 常被译成“装饰”,译成油漆工更形象:油漆工(decorator)刷油漆,被刷的对象叫 decoratee。这两种角色在模式里缺一不可。 定义:动态地给一个对象加上额外职责,就像在墙上刷油漆。比起靠生成子类来扩充功能,Decorator 更灵活——功能的种类、时机都可以在…
装饰模式 Decorator 常被译成“装饰”,译成油漆工更形象:油漆工(decorator)刷油漆,被刷的对象叫 decoratee。这两种角色在模式里缺一不可。 定义:动态地给一个对象加上额外职责,就像在墙上刷油漆。比起靠生成子类来扩充功能,Decorator 更灵活——功能的种类、时机都可以在…
消息摘要有唯一性和不可逆:同样的输入得到同样的摘要,很难从摘要反推原文。MD5 常被拿来做校验,旧系统里也用来处理用户口令(现代密码存储应使用专门的慢哈希,这里按原文给出一个简洁实现)。 下面这个 StringUtil 把任意字符串编成 32 位十六进制 MD5。 一、实现类 package tes…
应用里常有周期性工作,比如每 5 分钟检查一次新邮件。这类任务用 java.util.Timer 最省事:它自己维护调度线程,不必手写循环休眠。 Timer 也适合延迟执行(类似电视的延时关机)。多个线程可以共用一个 Timer,它内部是同步的,一般不必再包一层锁。 一、周期调度 下面这段每 5 分…
下面这组问题,每个学 Java 的人都应该搞懂。如果只是玩玩可以跳过;若自以为过了入门、却答不利落,不妨把自己重新算作初学者。 核心其实就几件事:引用指向对象、== 比的是变量里的值、String 不可变、final 锁的是引用而不是对象状态。 一、我声明了什么? String s = "Hello…
找工作要面试,有面试就有对付面试的办法。以下题目来自作者和朋友的面试经历,公司包括 IBM、E*Trade、Siebel、Motorola、SUN 以及其他大小公司。 面试题目有的不合情理、脱离实际。有纸面写的、当面考的、电话里问的,给你 IDE 的很少。所以看完请不要抱怨“这些都能用 IDE 解决…
创业者不去过安稳日子,图的是公司里的股权。创投圈有个字典里几乎找不到、却无处不用的词:Cap table,创业公司的股份拼骨图。每次拿投资人的钱就要给人股份,比例会随融资和扩团队不断变。 下面用一道应用题:以创业为起点、上市为终点,把黄马克公司每一轮股份变化摊开,看玄机藏在哪。 一、四条假设和一千万…
本文多数技巧围绕磁盘文件 I/O,但同样适合网络 I/O 和窗口输出。先看底层读写,再谈压缩、格式化和串行化等高级问题;不涉及搜索算法、数据结构,也不谈系统级文件高速缓冲。 Java 对磁盘文件有两套结构:基于字节流的,以及基于字符序列的。Java 里一个字符占两个字节,不像 C 那样一个字节就是一…
这篇是 Java 基础课的知识点提纲:从概述、类型与运算,到类与对象、继承多态、集合、异常、I/O 和线程。适合对照复习,不替代逐章例题。 完整课件入口:Java基础课程。 一、Java 概述 Java 介绍 开发环境:JDK、环境变量、Eclipse 第一个 Java 程序怎么拆开看 二、基本数据…
忍不住感叹,第一次对 Buffer(在社交媒体上发布最简单的方式)有所想法,已经差不多是两年前的事了。创立公司时各种模式都有,良莠不齐。那段时间里学到的最重要的事情之一是:当我快乐的时候,状态最好。 心情愉悦时,写代码更有效率,应对问题更敏捷,也更容易保持专注。下面 6 个习惯,能在状态不到 100…
创始人合伙创业,有的提供资金,有的提供场地,有的提供技术,有的提供销售渠道,有的提供融资资源。贡献性质不同,似乎完全无法等价对比:很难说研发就比销售更重要,也很难说拉来投资就比提供办公场地更重要。没有明确标准,就只能「拍脑袋」划分比例,往往埋下不满,并在创业最艰难的时候爆发。 有没有一种方法,可以在…