随笔分类 - 24种设计模式
摘要:生活中的一个例子: 就拿汽车在路上行驶的来说。即有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路上行驶。这你会发现,对于交通工具(汽车)有不同的类型,然而它们所行驶的环境(路)也在变化,在软件系统中就要适应两个方面的变化?怎样实现才能应对这种变化呢? 概述: 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用...
阅读全文
摘要:# # 代理模式 # 应用特性:需要在通信双方中间需要一些特殊的中间操作时引用,多加一个中间控制层。 # 结构特性:建立一个中间类,创建一个对象,接收一个对象,然后把两者联通起来 class sender_base: def __init__(self): pass def send_somethi
阅读全文
摘要:声明:原文链接:http://www.imooc.com/article/5137 计算年龄的例子
阅读全文
摘要:意图: 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 适用性: 当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。Facade 可以提供一个简单...
阅读全文
摘要:模式特点:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 程序实例:从简历原型,生成新的简历 代码特点:简历类Resume提供的Clone()方法其实并不是真正的Clone,只是为已存在对象增加了一次引用。 Python为对象提供的copy模块中的copy方法和deepcopy方法已经实现了原型模式,但由于例子的层次较浅,二者看不出区别。 #!/usr/b...
阅读全文
摘要:用途可以想象成每个ConcreteBuilder都是一栋楼,有几个Concretebuilder就是几栋楼 #!/usr/bin/env python # -*- coding: utf-8 -*- class Builder(object): """抽象接口类 """ def BuildPart(self): pass def Ge...
阅读全文
摘要:意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。 何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。 如何解决:将这些算法封装成一个一个的类,任意地替换。 关键代码:实现同一个接口。 应用实例: 1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。 2、旅行的出游方式,...
阅读全文
摘要:抽象工厂模式结构 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广。 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产品等级结构。那么为了将消费这些产品对象的责任和创建这些产品对象的责任分割开来,可以引进抽象工厂模式。这样的话,消费产品的一方不需要直接参与产品的创建工作,而只需
阅读全文
摘要:这个和简单工厂有区别,简单工厂模式只有一个工厂,工厂方法模式对每一个产品都有相应的工厂 好处:增加一个运算类(例如N次方类),只需要增加运算类和相对应的工厂,两个类,不需要修改工厂类。 缺点:增加运算类,会修改客户端代码,工厂方法只是把简单工厂的内部逻辑判断移到了客户端进行。
阅读全文
摘要:优点:用户不需要修改代码 缺点:当用户需要添加新的运算类的时候,不仅需新加运算类,还需要修改工厂类,违反了开放封闭原则
阅读全文