|
|
@ -1,7 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 目标
|
|
|
|
# 目标
|
|
|
|
本节使用一个书城的各种业务环节来展示面向对象的各种设计模式 。
|
|
|
|
本节使用一个书城的各方面业务需求来展示面向对象的常见设计模式 。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 任务
|
|
|
|
# 任务
|
|
|
@ -9,20 +9,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 说明
|
|
|
|
# 说明
|
|
|
|
面向对象的模式把编程过程中的一些思路固定化,并给一个名字方便理解 。
|
|
|
|
面向对象的模式是把编程过程中的一些思路固定化,并给一个名字方便理解 。
|
|
|
|
它是软件工程中一组经过验证的、可重复使用的代码写法 。
|
|
|
|
它是软件工程中一组经过验证的、可重复使用的代码写法 。
|
|
|
|
所以,模式不是语法,而是编程思路 。
|
|
|
|
所以,模式不是语法,而是编程思路 。
|
|
|
|
这样做的好处是,统一大家的代码形式,提高代码可读性、可维护性、可扩展性 。
|
|
|
|
这样做的好处是,统一大家的代码形式,提高代码可读性、可维护性、可扩展性 。
|
|
|
|
那为啥,面向过程没有这么做 ?
|
|
|
|
那为啥,面向过程没有这么做 ?
|
|
|
|
是因为这个思维提炼过程,充分利用了面向对象语言的特性:封装、继承、多态 。
|
|
|
|
是因为这个思维提炼过程,充分利用了面向对象语言的特性:封装、继承、多态 。
|
|
|
|
面向过程语言,没有这些特性,所以,面向过程语言没有面向对象模式 。
|
|
|
|
面向过程语言,没有这些特性,所以,面向过程程序设计一般不谈设计模式 。
|
|
|
|
|
|
|
|
|
|
|
|
因为 Python 对象协议的机制,多态、接口概念发生了根本变化 。
|
|
|
|
因为 Python 对象协议的机制,多态、接口概念发生了根本变化 。使得一些C++、Java 的模式没用了 。比如 “ 原型模式(Prototype)” ,可以使用copy.deepcopy()非常简便来创建 。另外,很多模式中继承关系也没必要了。但,下面很多示例中依旧保持了基类 。一是致敬经典,二是起到一个工程上更工整和代码注释的作用 。
|
|
|
|
很多模式中,类的继承关系没必要了。下面示例中很多依旧保持了基类 。
|
|
|
|
|
|
|
|
一是致敬经典,二是起到一个工程上更工整和强注释的作用 。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
另外,Python的动态语言的特性 。使得一些C++、Java 的模式没用了 。
|
|
|
|
|
|
|
|
比如 “ 原型模式(Prototype)” ,可以使用copy.deepcopy()非常简便来创建 。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 应用场景
|
|
|
|
# 应用场景
|
|
|
|