1.工厂模式

#encoding=utf-8
__author__ = 'kevinlu1010@qq.com' class ADD():
def getResult(self,*args):
return args[0]+args[1]
class SUB():
def getResult(self,*args):
return args[0]-args[1]
class MUL():
def getResult(self,*args):
return args[0]*args[1]
class DIV():
def getResult(self,*args):
try:
return args[0]/args[1]
except:return 0
class UNKnow():
def getResult(self,op1,op2):
return 'unknow'
class Factory():
Classes={'+':ADD,'-':SUB,'*':MUL,'/':DIV}
def getClass(self,key):
return self.Classes[key]() if key in self.Classes else UNKnow() if __name__=='__main__':
key='+'
op1=91
op2=45
factory=Factory()
c=factory.getClass(key)
r=c.getResult(op1,op2)
print r

工厂模式会创建一个工厂类,该类会根据实例化时的输入参数返回相应的类。Factory这个类会根据输入的key,返回相应的加,减,乘或除类。

2.策略模式

#encoding=utf-8
__author__ = 'kevinlu1010@qq.com' class Base():
def getPrice(self,price):
pass
class Origin(Base):
def getPrice(self,price):
return price
class Vip(Base):
def getPrice(self,price):
return price*0.8
class Sale(Base):
def getPrice(self,price):
return price-price/100*20
class Context():
def __init__(self,c):
self.c=c
def getPrice(self,price):
return self.c.getPrice(price) if __name__=='__main__':
strategy={}
strategy[0]=Context(Origin())
strategy[1]=Context(Vip())
strategy[2]=Context(Sale())
price=485
s=2
price_last=strategy[s].getPrice(price)
print price_last

策略模式中,系统会根据不同的策略,返回不同的值,例如超市里面,会有不同的计价方法,例如普通客户会以原价来计价,vip会打八折,活动促销时满100减20,这里就有三种策略,在系统中,输入原价和采取的策略方式,系统就会根据选择的策略,计算消费者最终需要支付的金额。策略模式与工厂模式类似,例如上面的例子也可以用工厂模式来实现,就是新建三个类,每个类都有一个计价的方法。而策略模式和工厂模式的区别是策略模式更适用于策略不同的情景,也就是类中的方法不同,而工厂模式更适合类不同的情景。

单例模式

class Singleton(object):
def __new__(type, *args, **kwargs):
if not '_the_instance' in type.__dict__:
type._the_instance = object.__new__(type, *args, **kwargs)
return type._the_instance
class MySin(Singleton):
b=0
def __init__(self):
print self.b
if not self.b:self.b+=1
print self.b
self.a=[1]
def change(self):
self.a.append(2) c1=MySin()
c1.a.append(3)
c2=MySin()
print c1.a
c1.change()
print c2.a

参考:http://www.cnblogs.com/wuyuegb2312/archive/2013/04/09/3008320.html

Python的设计模式学习的更多相关文章

  1. python之路,Day24 常用设计模式学习

    python之路,Day24 常用设计模式学习   本节内容 设计模式介绍 设计模式分类 设计模式6大原则 1.设计模式介绍 设计模式(Design Patterns) --可复用面向对象软件的基础 ...

  2. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  3. Python与设计模式之创建型模式及实战

    用Python学习一下设计模式,如果很枯燥的话,就强行能使用的就用一下.设计模式参考Python与设计模式-途索 1. 单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点. import ...

  4. python全栈学习路线

    python全栈学习路线-查询笔记 查询目录 一,硬件                                                                    十一,数据 ...

  5. Python 应用领域及学习重点

    笔者认为不管学习什么编程语言,首先要知道:学完之后在未来能做些什么? 本文将浅谈 Python 的应用领域及其在对应领域的学习重点.也仅是介绍了 Python 应用领域的"冰山一角" ...

  6. 第15.25节 PyQt(Python+Qt)入门学习:Model/View开发实战--使用QTableView展示Excel文件内容

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 在前面的订阅专栏<第十九章.Model/View开发:QTableView的功能及属 ...

  7. Python 装饰器学习

    Python装饰器学习(九步入门)   这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...

  8. 设计模式学习系列6 原型模式(prototype)

    原型模式(prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.允许一个对象再创建另外一个新对象的时候根本无需知道任何创建细节,只需要请求圆形对象的copy函数皆可. 1 ...

  9. Requests:Python HTTP Module学习笔记(一)(转)

    Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...

随机推荐

  1. 如何定位到div滚动条的最底端

    function ScrollDiv() { var ex = document.getElementById("calm"); ex.scrollTop = ex.scrollH ...

  2. 两个字符串,若为数字则都相加,若有一个不为数字则,输出error

    import java.util.*; /*请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法输入则返回“error”: * 用例:123 234 * 输出:357 * 用例123 as ...

  3. 配置LINUX为路由

    配置:关闭防火墙 linux1    地址1: 192.168.10.10/24 地址2:192.168.20.10/24(不指定网关,做为路由,自己就是网关) linux2    地址1: 192. ...

  4. Windows下性能最好的I/O模型——完成端口

    I/O模型--完成端口 设计目的: 常见的网络通信分为两种:同步和异步. 在同步通信中,每一次接受数据都会导致主线程的挂起,从而阻塞住了其他操作.为了解决这一问题,我们通常会采取同步通信+多线程的策略 ...

  5. 使用Keil建立工程和烧录到89C52板上

    又开始学习C51了,不清楚能坚持多久,之前学过一段时间,学完P1口就没再学了,之前学的都忘了. 1. 使用Keil 进行建立工程:打开Keil 4. 加载C文件进工程里面 然后展开"Sour ...

  6. 20160522--20160526----mybatis入门基础

    一.基础知识: 1.对原生态jdbc程序(单独使用jdbc开发)问题总结  2.mybatis框架原理 (掌握)  3.mybatis入门程序  4.用户的增.删.改.查  5.SqlMapConfi ...

  7. SQL Server调优系列进阶篇 - 如何索引调优

    前言 上一篇我们分析了数据库中的统计信息的作用,我们已经了解了数据库如何通过统计信息来掌控数据库中各个表的内容分布.不清楚的童鞋可以点击参考. 作为调优系列的文章,数据库的索引肯定是不能少的了,所以本 ...

  8. SQL Server(函数) 关键字的使用 三

    三, 函数关键字 -- 使用介绍 28, Function的使用(Function的内建 SQL函数)? 内建 SQL 函数的语法是: SELECT function(列) FROM 表) 29, a ...

  9. python出现Non-ASCII character '\xe7' in file ex6.py on line 1, but no encoding declare错误

    http://www.cnblogs.com/qi09/archive/2012/02/06/2340712.html python中出现Non-ASCII character '\xe7' in f ...

  10. 合理配置MySQL缓存 提高缓存命中率

    众所周知,系统读取数据时,从内存中读取要比从硬盘上速度要快好几百倍.故现在绝大部分应用系统,都会最大程度的使用缓存(内存中的一个存储区域),来提高系统的运行效率.MySQL数据库也不例外.在这里,笔者 ...