Linux 禁用 SWAP

在服务器和容器平台建议关闭 SWAP,避免内存交换影响服务器性能,甚至引发数据丢失。

一、不重启电脑,禁用启用swap,立刻生效

# 禁用命令

sudo swapoff -a

# 启用命令

sudo swapon -a

# 查看交换分区的状态
sudo free -m

二、重新启动电脑,永久禁用Swap

把根目录文件系统设为可读写

sudo mount -n -o remount,rw /

用vi修改/etc/fstab文件,在swap分区这行前加 # 禁用掉,保存退出

vi /etc/fstab

i      #进入insert 插入模式

:wq   #保存退出
mount -a
# 使 fstab 文件生效

重新启动电脑,使用free -m查看分区状态

reboot

sudo free -m

参考文献

pkg-config 自动补全 C 编译库依赖

pkg-config 是一个在源代码编译时查询已安装的库的使用接口的计算机工具软件。

工作原理

其工作原理如下: 当安装一个库时(例如从RPM,deb或其他二进制包管理系统),会包括一个后缀名为 pc 的文件,它会放入某个文件夹下(依赖于你的系统设置)。 例如,在 Linux 为该软件的库文件所在文件夹 lib 之下的子文件夹 pkgconfig 。 并把该子文件夹加入 pkg-config 的环境变量 PKG_CONFIG_PATH 作为搜索路径,例如在 bash 配置文件中加入一行:

$ export PKG_CONFIG_PATH=/usr/local/`库的名字`/lib/pkgconfig:$PKG_CONFIG_PATH

在这个.pc文件里包含有数个条目。这些条目通常包含用于其他使用这个库的程序编译时需要的库设置,以及头文件的位置,版本信息和一个简介。

这是一个用于libpng的.pc文件的样例:

prefix=/usr/local  
 exec_prefix=${prefix}  
 libdir=${exec_prefix}/lib  
 includedir=${exec_prefix}/include  
    
 Name: libpng12  
 Description: Loads and saves PNG files  
 Version: 1.2.8  
 Libs: -L${libdir} -lpng12 -lz  
 Cflags: -I${includedir}/libpng12

这个文件告诉我们这些库可以在/usr/local/lib找到,头文件可以在/usr/local/include里找到,库的名字是libpng12并且版本号是1.2.8。它也提供了用于编译依赖于libpng的源代码时需要的链接器参数。

这儿是一个编译时使用pkg-config的样例:

gcc -o test test.c $(pkg-config --libs --cflags libpng)

pkg-config 同其他命令一样,有很多选项,不过我们一般只会用到 --libs 和 --cflags 选项,分别用于搜索指定头文件和库文件。

在 Makefile 中则是这样来用:

...
DEPENDENCIES=libcpg libcmap libquorum libqb glib-2.0 fuse sqlite3 librrd

CFLAGS += -I.
CFLAGS += $(shell pkg-config --cflags ${DEPENDENCIES})

LDFLAGS += $(shell pkg-config --libs ${DEPENDENCIES})

.c.o:
        $(CC) $(CFLAGS) -c -o $@ $< -MMD -MT $@ -MF $@.d
...

参考文献

在 linux 中解析 lib 文件

解析 lib 文件可以获取一些二进制库的版本历史信息,例如解析 /usr/lib64/libc.so.6 即可解析到 glibc 的版本历史。

在Linux中,有许多工具可以用来解析库文件( .lib 文件)。 可以使用工具如 nm , objdump 和 readelf 来查看库文件的符号表,包含在库文件中的对象文件的信息,以及库文件的其他信息。

下面是一些常用的命令:

`nm`: 这个命令可以显示符号表信息。你可以运行 `nm <library-name>.lib` 来查看库文件的符号表信息。

`objdump`: 这个命令可以显示包含在库文件中的对象文件的信息。你可以运行 `objdump -p <library-name>.lib` 来查看库文件的信息。

`readelf`: 这个命令可以显示库文件的其他信息,包括符号表信息和对象文件信息。你可以运行 `readelf -a <library-name>.lib` 来查看库文件的信息。

这些命令可以帮助你解析库文件并查看其中包含的信息。

内容参考自 ChatGPT

新冠恢复一部份后的感受

距离感染新冠今天是第八天了, 终于感觉身体恢复了很多, 趁着温柔的午后阳光, 走到楼下的小店点了一份煲仔饭。

看着外面的一切, 这个世界在我眼前前所未有的清晰, 街道上热热闹闹, 仿佛又回到了那个热闹的时代, 一切都在恢复着生机。

吃完饭随便走走, 感觉还好, 此时还不敢动作太大, 不敢吹冷风, 紧紧裹着大衣, 走了一阵, 就打算回去继续休息了。

新冠康复后, 最大的感受大概是体力的恢复, 终于可以做点事情了, 不过咳嗽和嗓子不舒服还是存在, 还是要好好休养一阵子, 与病毒的抗争, 还在继续。

2022 年博客经营报告

过去一年中,个人网站策略做了简单的调整。

大概从去年开始,打算全面使用静态网站了, 使用 hugo 建立了个人主页,本打算替换掉博客, 将当时大部分的文章都迁移到了 hugo 制作的 www 打头的个人主页, 这样的网页很快,很轻,很容易定制, 当时也在定制博客方面收获了很多的成就感。

但是后来发现,这样的博客虽然很简单, 可以很轻易的部署, 但是写文章的感觉并不好, 每次都需要纠结一下用什么编辑器, 写完了还得推送、构建, 每次推送都留意一下自动构建有没有完成, 需要过一阵子才能看到文章, 这对于想要频繁更新内容,或是简单记录转瞬即逝的草稿, 很不友好, 渐渐的自己也不想写东西了。

这时候才知道自己个人博客的好, 使用 typecho 搭建个人动态博客已经三年有余了, 当时有点嫌弃它的“慢”,控制台报错, 第三方主题难以定制, 等等问题, 现在才发现这是很适合写东西的地方, 因为它足够简单, 使用 redis 缓存后速度有了很大提升, 可以随时打开就写, 写好就发, 一气呵成。

于是在今年大概 11 月份, 我重新还是讲个人博客作为更文的主战场, 辅以各种第三方的论坛/博客等, 用来记录生活、记录随想、分享技术。

因此,整体的流量上看, 由于大半年的时间都抱着想要放弃博客的想法, 其流量有了一个后退, 但在后期, 重拾博客之后, 流量开始反升。

下面结合 google analytics 统计报告做一个简单的数据报告:

整体流量

对比上一年,我的 blog 流量有所下降,全年共计获得了 116,101 次访问。

当然在最后两个月,流量对比上一年同期有所上升,这大概也是未来的主要趋势。

我的 www 主页流量有所上升,全年共计获得了 48,066 次访问。

特别是最后几个月,流量有了较大提升。

访客来源

先看一下 blog,

48% 的访客来自搜索引擎,27%来自引用,24%来自直接访问。

趋势方面,来自第三方引用跳转的比例有一个明显提升。

www 主页这边,

81% 的访客是直接访问,看来来到主页的访客是占大头的。

趋势变化上,各个途径的访客数均有提升。

访客画像

先看一下 blog 的,

访客来源国家,最多的还是中国。

这些访客主要分布在中国的北上广深。

大部份是通过 chrome 进行访问。

主要是使用的 winodws 系统进行访问。

移动设备这边则主要是 android。

再来看看主页 www 的。

主要来自中国和俄罗斯,这是我没想到的。

主要分布在北山广深和莫斯科。

浏览器方面使用 Safari 较多,难道都是我自己访问的。

操作系统主要是 IOS,难道真的都是我自己。

移动设备也是 IOS,这难道。。

热门内容

博客 blog 的前十篇热门内容如下:

主页 www 的前十篇是这些:

总结

总的来看,整个网站的流量是有所上升,某些角度的技术文章比较受欢迎,受众主要分布在中国的一线城市,访客主要通过搜索引擎和外部引用跳转来到这里。

新的一年,我将好好利用动态博客快速所见即所得的特性,尽量多写一些好内容出来。

渠道方面,可能会在简书,以及各大云厂商的开发者论坛同步一些文章,

作为自身,我会不断精进自己的技术,扩展深度和广度,争取多输出一些有价值的内容,提升质量和深度,创造更多价值。

希望各位多多支持。

[摘录]《任正非传》 – 孙力科

任正非传 孙力科 36个笔记

◆ 第一章 谁是任正非?

出生在贵州安顺地区镇宁县的任正非,祖籍便在浙江金华。

任摩逊希望自己的儿子在以后的人生中能明辨是非,成为一个对社会有价值的人。“任正非”的名字,也就这样落定了。任摩逊和程远昭夫妻俩一共

程远昭身上有着典型的中国优秀女性的特质:勤劳、耐苦、慈爱、不服输

他理工基础雄厚,掌握了数门外语,而且文科实用水平颇高,对毛泽东思想有着自己深刻的理解。

虽然由于父亲的背景原因,任正非在军队中除了一个“学毛著标兵”的口头嘉奖之外,再没有得到任何实质性的嘉奖,但正是这些看起来的遗憾,让他养成了淡泊名利、宠辱不惊的心态

当时市面上的交换机种类繁多,程控交换机是其中使用价值最高的,同时,它对技术的要求也最高,需要投入的经费也最多。这种程控交换机可以用于企事业单位内部的沟通,甚至还能展开长途交流。

◆ 第二章 踏上新征程

1991年,任正非等到了机会。这一年,邬江兴首次研发出万门级的04数字程控交换机,获悉消息后任正非大受鼓舞。纵使这个“第一”的殊荣不是他的,不是华为的,但属于中国,属于一个崭新的时代!任正非从邬江兴的成功中看到了中国人在通信行业中逆袭的可能。邬江兴的经历与任正非特别相似。他是解放军信息工程学院的院长,比任正非小10岁。他和任正非一样是军人出身,同样对“中国人永远无法造出大型程控交换机”的断言嗤之以鼻。

这年秋天,任正非带着一队企业骨干踏上了去美国考察的征程。一路考察,任正非有了不同的感受。美国的汽车乘坐起来更加舒适,看到的楼宇也更高,他的感叹虽不至于像明治维新的股肱臣僚岩仓具视和他远赴欧美参观的使节团那般“始惊、次醉、终狂”夸张,但也同样对美国的科技成就发出感慨:我国的国土与美国基本相当,但荒漠、大山、高原面积大,余下的土地承载着十几亿国民。加之缺少教育经费,文化素质偏低,人口增长快,田边地角均被挖空,何来的草地、山林呢?

任正非原以为公园的核心地带又是一片科研基地或技术工厂,但走进以后发现里面竟然是一座原始森林。“从森林到工厂”,在此刻的任正非看来,或许正是中国的通信产业需要经历的一条曲折而又漫长的道路。出于对科学研究和技术教育的崇仰,任正非走出中央公园后没有急于赶往下一个科技城市,而是走进自然博物馆,继续参观。出乎意料的是,自然博物馆中陈列着的各种珍奇精品和古迹文物让他和团队成员大开眼界,在一个小时的时间里,他们甚至连一个角落都没有参观完,这让任正非铭刻于心。

结束了这次美国之行,任正非等人从洛杉矶登上了返回深圳的飞机。在飞机上,任正非心潮澎湃,久久不能平静。后来他曾回忆当时的想法,表现出了对国家科学教育深深的隐忧:“越繁荣就越发展科技,越发展科技、越重视教育就越人才辈出,越人才辈出,经济就越繁荣,如此走入一个良性的循环圈……美国将经久不衰。”

客户的质疑和反对。最典型的是河南商丘的邮电局农话科长张荣钧。这位张科长毫不留情地指出这些机器(资料上写的是用户机,这里改成机器就行)在使用过程中的不如意,“尤其是雷击问题更是令人头痛”。1993年这一年,任正非有得有失,但绝不患得患失的他早已认定了自己要走的路。

◆ 第三章 华为新起点

任正非说,他不会以一时的成败来论英雄;华为的企业文化,其精髓不在于百战百胜,而在于在战局不利的状况下培养出风险抗拒能力。显然,正是这种抗拒能力,成为华为至今仍能在国际市场上如鱼得水的重要原因。

◆ 第五章 “狼”行天下

任正非知道,李一男长于技术、短于管理,因此他觉得李一男不擅长管理这一条注定了港湾在巅峰之后一定会滑向低谷

经过这番折腾,李一男到底还是没有彻底离开华为,而任正非三番五次对李一男的“委任”,也足见他的爱才之心。更关键的是,任正非“降服”李一男既不失华为的脸面,还留住了人才,为华为的持续发展积蓄着人才的能量。因此,在与李一男的博弈中,任正非完胜。

◆ 第七章 华为、思科大PK

毕竟华为的产品已经成为中国通信产品体系中的代表,华为在美国栽跟头,其余的中国产品也许就没有再战的勇气了。

为了稳住军心,任正非给出了最高指示:“敢打才能和,小输就是赢。”

任正非则从华为的立场出发,言明“自己没有上市,公司上税、守法,对客户和员工负责就可以了,华为不需要抛头露面,针对外界的各种说法华为也从不解释”。

令人意想不到的是,在这场角逐中,一些中国媒体也站在了思科这边,这着实让人为华为担忧。

要想建立一个国际化的大型企业,不单需要革新市场、优化产品,更需要加强与媒体之间的联系,并在全球范围内广泛结交同盟,团结一切可以团结的力量,以便在与对手直面竞技时随时应对。

郭平真诚地邀请两家律师事务所的一些顶级律师来华为,事先告诉了他们华为的经营方略,然后让他们全面地领略真正的华为。

律师们向华为献出一条妙计:紧抓“私有协议”这个字眼,在这方面做足准备功夫,而反击的理由即是思科运用“私有协议”在市场上大搞垄断。这样一来,华为在反击思科时就显得更名正言顺,这自然好于一味地退守和隐忍。

“私有协议”,即是“在国际标准组织实现网络互联互通而制定标准和规范之前,某家公司产品先进入市场而形成的标准”。

2003年3月初,在美国和德国举办的电信设备展览会上,人们再次看到了华为那阳光自信、积极乐观的形象。

吸引了全世界目光的“世纪之讼”在双方的战略妥协下落下幕布。思科保住了世界通信霸主的地位,从此不再趾高气扬;华为在美国市场上有了一席之地,并因这场大战让全世界刮目相看。从此,不论是美国还是东半球的国家,都愿意和华为做生意,华为在国际市场的业务量开始出现令人可喜的翻番式增长态势。

钱伯斯在与任正非过招之后,开始对华为“暗送秋波”,并在2005年主动访问华为。通过这次访问,钱伯斯更加明确地断定,思科未来的竞争对手很有可能不在欧洲,而在亚洲东部的中国。

一如倪光南在总结“世纪之讼”时所说的那样:“在信息领域,核心技术、大量的知识产权非常重要。之所以华为的知识产权技术能够站得住,就是因为自己开发了整个软件系统,可以在这个产业里面不至于受到人家的压迫,赢得最后的胜利。”华为的胜利,完美地诠释了这一点。

◆ 第八章 “华为精神”

财务管理地位极重,小到每一个产品的定价评估和成本计算、大到企业在一段发展时期内的收支盈亏等,没有财务的参与,都是行不通的。

在华为的年度报表中,一组数据更显示出了财务危机:2003年,华为的利润率还保持着较高的19%,可到了2007年骤降为7%;2003年的净利润率保持在14%,2007年则下降至不到5%。

经过讨论,任正非和众人得出这样的结论:要继续向IBM公司学习,不单要学习IPD等管理模式,更要在财务方面借鉴经验弥补不足。

◆ 第九章 以人为本

若从时代的角度出发,促使华为一步步迈向制高点的最关键因素则在于对人才的培养和提拔。

不单是任正非,几乎所有的华为人都这样认为:销售是一段刻骨铭心的经历。没有销售的人生是不完整的。

美国著名企业管理学者沃伦·本尼斯曾说:“员工培训是企业风险最小、收益最大的战略性投资。”任正非重视对员工的培训,就等于从根本上避免了风险,获取了收益。

他最推崇任正非的一句话就是:“烧不死的鸟才是凤凰。”

根据二战名将曼施坦因的分析,军队中最不需要的高级干部就是这种“不聪明而勤奋”的人,因为他们没有开创的思维和前卫的意识。能力和智慧不出众,越是兢兢业业,越会对整个团队造成危害。

◆ 第十章 一切都只为客户

见老总将皮鞋送给自己,两位主管万分尴尬。任正非不是在送礼,而是通过皮鞋这个媒介提醒他们:你们动的脑子很多,这很好,但可惜你们走的路真的是太少了!

◆ 第十一章 新征程,新华为

云计算的地位并不亚于“互联网+”。有人曾预料,云计算的广泛应用,甚至能够将现代信息产业引领到一个崭新的时代。这是“第三次IT技术革命”,有着非同寻常的意义。

[摘录]《人人都懂设计模式:从生活中领悟设计模式(Python实现) 》 – 罗伟富

人人都懂设计模式:从生活中领悟设计模式(Python实现) 罗伟富 64个笔记

◆ 基础篇

类图用于表示不同的实体(人、事物和数据),以及它们彼此之间的关系。该图描述了系统中对象的类型以及它们之间存在的各种静态关系,是一切面向对象方法的核心建模工具。

UML 类图中最常见的几种关系有:泛化(Generalization)、实现(Realization)、组合(Composition)、聚合(Aggregation)、关联(Association)和依赖(Dependency)。这些关系的强弱顺序为:泛化=实现 > 组合 > 聚合 > 关联 > 依赖

泛化(Generalization)是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为

实现(Realization)是一种类与接口的关系,表示类是接口所有特征和行为的实现。

组合(Composition)也表示整体与部分的关系,但部分离开整体后无法单独存在。因此,组合与聚合相比是一种更强的关系。

聚合(Aggregation)是整体与部分的关系,部分可以离开整体而单独存在。

关联(Association)是一种拥有关系,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。

依赖(Dependency)是一种使用的关系,即一个类的实现需要另一个类的协助,所以尽量不要使用双向的互相依赖。

在对象间定义一种一对多的依赖关系,当这个对象状态发生改变时,所有依赖它的对象都会被通知并自动更新。

监听模式又名观察者模式,顾名思义就是观察与被观察的关系

监听模式的核心思想就是在被观察者与观察者之间建立一种自动触发的关系。

监听模式根据其侧重的功能还可以分为推模型和拉模型

推模型:被观察者对象向观察者推送主题的详细信息,不管观察者是否需要,推送的信息通常是主题对象的全部或部分数据。

拉模型:被观察者在通知观察者的时候,只传递少量信息。

SolidState、LiquidState、GaseousState这三个单词中我们会发现都有一个State后缀,于是我们会想它们之间是否有一些共性,能否提取出一个更抽象的类,这个类就是状态类(State)

用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

很多系统中,多个类很容易相互耦合,形成网状结构。中介模式的作用就是将这种网状结构(如图3-3所示)分离成星型结构(如图3-4所示)。这样调整之后,使得对象间的结构更加简洁,交互更加顺畅。

工厂模式关注的是整个产品(整体对象)的生成,即成品的生成;而构建模式关注的是产品的创建过程和细节,一步一步地由各个子部件构建为一个成品。

区别:组合模式关注的是对象内部的组成结构,强调的是部分与整体的关系。构建模式关注的是对象的创建过程,即由一个一个的子部件构建一个成品的过程。

适配模式中主要有三个角色,在设计适配模式时要找到并区分这些角色。 (1)目标(Target):即你期望的目标接口,要转换成的接口。 (2)源对象(Adaptee):即要被转换的角色,要把谁转换成目标角色。 (3)适配器(Adapter):适配模式的核心角色,负责把源对象转换和包装成目标对象。

策略模式的核心思想是:对算法、规则进行封装,使得替换算法和新增算法更加灵活。

工厂模式三姐妹:简单工厂模式(小妹妹)、工厂方法模式(妹妹)、抽象工厂模式(姐姐)。

这是最简单的一个版本,只有一个工厂类 SimpleFactory,类中有一个静态的创建方法createProduct,该方法根据参数传递过来的类型值(type)或名称(name)来创建具体的产品(子类)对象

不符合“开放封闭”原则,如果要增加或删除一个产品类型,就要修改switch…case…(或if…else…)的判断代码。

定义一个创建对象(实例化对象)的接口,让子类来决定创建哪个类的实例。工厂方法使一个类的实例化延迟到其子类。

盒马鲜生之所以这么火爆,一方面是因为中国从来就不缺像David这样的吃货,另一方面是因为里面的生鲜很新鲜,而且可以自己挑选。

将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。

命令模式是一种高内聚的模式,之所以说是高内聚是因为它把命令封装成对象,并与接收者关联在一起,从而使(命令的)请求者(Invoker)和接收者(Receiver)分离。

(1)你希望系统发送一个命令(或信号),任务就能得到处理时。如 GUI 中的各种按钮的点击命令,再如自定义一套消息的响应机制。 (2)需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互时。 (3)需要将一系列的命令组合成一组操作时,可以使用宏命令的方式。

在不破坏内部结构的前提下捕获一个对象的内部状态,这样便可在以后将该对象恢复到原先保存的状态。

备忘模式的最大功能就是备份,可以保存对象的一个状态作为备份,这样便可让对象在将来的某一时刻恢复到之前保存的状态。

人生没有彩排,但程序却可以让你无数次回放!这便是备忘模式的设计思想。

运用共享技术有效地支持大量细粒度对象的复用。

在故事剧情中,我们通过限定颜料的数量并采用共享的方式来达到节约资源、节约成本的目的,在程序的世界中这种方式叫享元模式(Flyweight Pattern)。

封装一些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。

设计模式的开山鼻祖 GoF 的《设计模式:可复用面向对象软件的基础》一书中提到了23种设计模式,也称为经典设计模式。

◆ 进阶篇

过滤器模式就是根据某种规则,从一组对象中,过滤掉一些不符合要求的对象的过程。

MVC 将程序的各个模块进行分层,M(Model)负责数据的存储,V(View)负责数据的显示,C(Controller)负责与用户的交互逻辑,也就是业务逻辑。

模型负责数据的持久化(也就是存储);视图负责数据的输入和显示,直接和用户交互的一层,如大家看到的网站的页面内容、在表单上输入的数据;控制器负责具体的业务逻辑,根据用户的请求内容操作相应的模型和视图。

MVP是MVC的一个变种,很多框架都自称遵循MVC模式,但是实际上它们却实现的是MVP模式;在MVP中使用Presenter对视图和模型进行解耦,视图和模型独立发展,互不干扰,沟通都通过Presenter进行。

前端应用MVC模式(前端的Model并不持久化数据,只是缓存数据或临时数据),后端也用 MVC 模式。

整个网站也是一种 MVC 模式,前端相当于View,而后端同时负责Controller和Mode(l 服务器代码相当于Controller,数据库相当于Model);用户直接与前端进行交互,根本不知道有后端的存在

◆ 经验篇

S—单一职责原则,O—开放封闭原则,L—里氏替换原则,I—接口隔离原则,D—依赖倒置原则

开放封闭原则,即Open Close Principle,简称OCP。

接口尽量小,但是要有限度。当发现一个接口过于臃肿时,就要对这个接口进行适当的拆分。但是如果接口过小,则会造成接口数量过多,使设计复杂化。所以接口大小一定要适度。

软件的设计是一个循序渐进、逐步优化的过程。经过一次次的逻辑分析,一层层的结构调整和优化,最终才能得出一个较为合理的设计图

单一职责原则告诉我们实现类要职责单一

里氏替换原则告诉我们不要破坏继承体系

依赖倒置原则告诉我们要面向接口编程

接口隔离原则告诉我们在设计接口的时候要精简单一。

开放封闭原则告诉我们要对扩展开放,对修改封闭。开放封闭原则可以说是整个设计的最终目标和原则!开放封闭原则是总纲,其他四个原则是对这个原则的具体解释。

在实际的项目开发中,必须要按时按量地完成任务。项目的进度受时间成本、测试资源的影响,而且程序也一定要保证稳定可靠。

面对需求的变更,我们有三种解决方法。方法一,直接改原有的函数(方法),这种方式最快速,但后期维护最困难,而且不便拓展,是一定要杜绝的

方法二,增加一个新方法,不修改原有的方法,这在方法级别上是符合单一职责原则的,但会给上层的调用增加不少麻烦

方法三,增加一个新的类来负责新的职责,两个职责分离,这是符合单一职责原则的

每一个逻辑单元应该对其他逻辑单元有最少的了解:也就是说只亲近当前的对象。只和直接(亲近)的朋友说话,不和陌生人说话。

Keep It Simple and Stupid 保持简单和愚蠢。

“简单”就是要让你的程序能简单、快速地被实现;“愚蠢”是说你的设计要简单到傻瓜都能理解,即简单就是美!

Don't repeat yourself. 不要重复自己

不要重复你的代码,即多次遇到同样的问题,应该抽象出一个共同的解决方法,不要重复开发同样的功能。也就是要尽可能地提高代码的复用率

(1)函数级别的封装:把一些经常使用的、重复出现的功能封装成一个通用的函数。 (2)类级别的抽象:把具有相似功能或行为的类进行抽象,抽象出一个基类,并把这几个类都有的方法提到基类去实现。 (3)泛型设计

你没必要那么着急,不要给你的类实现过多的功能,直到你需要它的时候再去实现。

Rule of three 称为“三次法则”,指的是当某个功能第三次出现时,再进行抽象化,即事不过三,三则重构。

查询(Query):当一个方法返回一个值来回应一个问题的时候,它就具有查询的性质; 命令(Command):当一个方法要改变对象的状态的时候,它就具有命令的性质。