当DP遇见Py(二) -- 策略模式
定义
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
什么是设计模式?
设计模式(Design Pattern)的提出,是面向对象程序设计演化过程中的一个重要里程碑。正如Gamma,Helm,Johnson和Vlissides在他们的经典著作《设计模式》一书中所说的:设计模式使得人们可以更加简单和方便地去复用成功的软件设计和体系结构,从而能够帮助设计者更快更好地完成系统设计。
Python 与设计模式
设计模式是一种设计思想,语言是实现思想的工具。因此,不同语言的特性影响了设计模式的实现,有些语言更容易实现设计模式,而有些语言则比较难。
在讲设计模式的书籍中基本上都是以静态语言
来实现的,如:《设计模式》主要以C++
为主、《Head First 设计模式》使用Java、《大话设计模式》使用C#
等等。那么,以Python
为代表的动态语言
怎么样来实现设计模式呢?
Python 是一种完全面向对象的动态语言,提供了与传统面向对象语言截然不同的对象模型,影响了设计模式的实现和使用。本系列尝试用Python语言来实现设计模式,并与C++的实现方式进行比较,进一步体现Python中的“动态性”及其具体应用。
在Python(Python2.x)中使用中文字符常常给我们带来困扰。经常会遇到以下的错误:
1 | UnicodeDecodeError: ’ascii’ codec can’t decode byte 0xe9 in position 1: ordinal not in range(128) |
这是由于中文的字符编解码错误造成的。下面就让我们来研究一下字符编码和Python 的字符处理机制。注:本文Python 的内容仅适用于2.x,如果你使用3.x,那么恭喜你,你将不存在这些问题。
借用《Dive into Python3》中的一句话:
“你所了解的关于字符串的知识都是错的。”
1 | // main.c |
最近在研究Golang,作为Vimer当然要配置vim来建立Go的工作环境。对于一门语言的初学者来说,学习别人的代码,能够对代码中的符号进行自动跳转是比较重要的。安装godef和相应插件,就可以实现这个功能。
go get code.google.com/p/rog-go/exp/cmd/godef
git clone https://github.com/dgryski/vim-godef.git ~/.vim/bundle/vim-godef
在Go代码文件,把光标移到一个函数或变量上,在命令模式下输入gd
。vim会显示这个函数的定义。详细配置参见vim-godef。
vim-godef
提供了三种跳转方式:
切割窗口
g:godef_split=1
打开新新窗口
g:godef_split=2
在文件内的符号步切割窗口
g:godef_same_file_in_same_window=1
感觉这三种方式都不是很爽,希望要的是:
小小修改了一下vim-godef
的插件:
1 | if out =~ 'godef: ' |
在~/.vimrc
中添加:
let g:godef_split=2
搞定!