Proxy 代理模式


起步

代理模式属于结构型,允许在不改变被代理类代码的基础上,为被代理类添加附加功能。

代理模式出没在各种场景,比如:1. 简化复杂系统的使用;2. 隐藏被代理对象;3. 为远程服务提供本地调用接口;4. 为服务提供预处理;等等。


Facade 门面模式


起步

门面模式属于结构型,旨在定义一组高层接口让子系统更易用。

照《Learning Python Design Patterns, 2nd Edition.pdf》一书的说法就是:It delegates the client’s requests to the appropriate subsystem objects using composition

这个模式太简单常见了,我都不知道怎么说起……


Strategy 策略模式


起步

策略模式属于行为型,常用来避免冗长的分支判断。

概念与使用都极为简单,这里就用维基百科中的一句话诠释:the strategy pattern enables selecting an algorithm at runtime


Factory 工厂模式


起步

工厂模式属于创建型,一般分三类:简单工厂、工厂方法、抽象工厂。

大多数工厂类以 Factory 结尾,创建对象的方法一般以 create 开头,但都不强行要求。


defaultdict 嵌套用法


起步

昨天在公司加班要处理这样一组数据:

{"村": "李村", "症状": "血糖", "姓名": "小李1"}
{"村": "李村", "症状": "血糖", "姓名": "小李2"}
{"村": "李村", "症状": "体量", "姓名": "小李3"}
{"村": "李村", "症状": "空腹", "姓名": "小李4"}
...

{"村": "刘村", "症状": "体量", "姓名": "小刘1"}
{"村": "刘村", "症状": "血糖", "姓名": "小刘2"}
{"村": "刘村", "症状": "空腹", "姓名": "小刘3"}
...

{"村": "王村", "症状": "空腹", "姓名": "小王1"}
{"村": "王村", "症状": "血糖", "姓名": "小王2"}
{"村": "王村", "症状": "体量", "姓名": "小王3"}
...

当时的需求是,统计出每个村每种症状的人数。数据是放在一个列表中一起返回的。