几行代码搞定python 设计模式[转]

Python代码  

  1. #!/usr/bin/env python   
  2. # -*- coding:utf-8   
  3.   
  4. class HttpBase:   
  5.     def get(self):   
  6.         psss   
  7. class Http1(HttpBase):   
  8.     def get(self):   
  9.         print 'http1'   
  10. class Http2(HttpBase):   
  11.     def get(self):   
  12.         print 'http2'   
  13.   
  14.   
  15. class Base:   
  16.     def __init__(self):   
  17.         self.httpobj = None   
  18.     def http(self):   
  19.         self.httpobj.get()   
  20.     def compute(self):   
  21.         self.http()   
  22.         self.show()   
  23.     #虚函数   
  24.     def show(self):   
  25.         pass   
  26.     def notify(self, k):   
  27.         print 'notify', k   
  28.           
  29.   
  30. #桥接模式,通过A,B 关联不同的http1和http2   
  31. class BaseA(Base):   
  32.     def __init__(self):   
  33.         self.httpobj = Http1()          
  34.     def notify(self, k):   
  35.         print 'A notify', k       
  36.     def show(self):   
  37.         print 'show a'   
  38.              
  39. class BaseB(Base):   
  40.     def __init__(self):   
  41.         self.httpobj = Http2()   
  42.     def notify(self, k):   
  43.         print 'B notify', k   
  44.     def show(self):   
  45.         print 'show b'   
  46.   
  47. #观测者模式   
  48. class Observer:   
  49.     def __init__(self):   
  50.         self.listOB = []   
  51.     def register(self, obj):   
  52.         self.listOB.append(obj)   
  53.     def notify(self):   
  54.         for obj in self.listOB:   
  55.             obj.notify(len(self.listOB))   
  56.   
  57. #适配器模式   
  58. class B1:   
  59.     def http(self):   
  60.         BaseB().http()   
  61. #工厂模式   
  62. class Factory:   
  63.     def CreateA(self):   
  64.         return BaseA()   
  65.     def CreateB(self):   
  66.         return BaseB()   
  67.   
  68.   
  69. #单例模式   
  70. class Logger(object):   
  71.     log = None   
  72.     @staticmethod   
  73.     def new():   
  74.           
  75.         import threading   
  76.         #线程安全   
  77.         mylock = threading.RLock()   
  78.         mylock.acquire()   
  79.         if not Logger.log:   
  80.             Logger.log = Logger()   
  81.         mylock.release()   
  82.           
  83.         return Logger.log   
  84.     def write(self, v):   
  85.         print 'Logger ', v   
  86.   
  87. if __name__ == "__main__":   
  88.     a = Factory().CreateA()   
  89.     b = Factory().CreateB()   
  90.       
  91.     objS = Observer()   
  92.     objS.register(a)   
  93.     objS.register(b)   
  94.       
  95.     a.compute()   
  96.     b.compute()   
  97.     objS.notify()   
  98.       
  99.     b1 = B1()   
  100.     b1.http()   
  101.       
  102.     Logger.new().log.write('v')   

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,转载请注明出处!http://www.cnblogs.com/sunshine-anycall/archive/2012/07/04/2575513.html

时间: 2024-12-18 07:39:02

几行代码搞定python 设计模式[转]的相关文章

几行代码搞定一棵漂亮的树

程序名:JTree(树状控件)结合了XML的长处,使您只需几行代码就可以拥有像Windows的资源管理器一样的Treeview了. 之前,本人曾写过一个Treeview,但是,不够美观,这一版本,在外观上做了很大的改进,很漂亮.运行速度很快. 详细功能请见示例示例打包下载 JTree在onclick时,有两个值可以用: var myTree=new JTree("showTree","vogueType.xml");myTree.setPicPath("i

jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层_jquery

复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>jquery.tex

几行代码搞定java生成解析二维码功能

最近公司要求扫描二维码和生成二维码的功能.而群里部分网友也提到了.我这里就写了一个demo,和大家分享.代码很简介,希望大家能够喜欢. 网友表示在网上搜索了很多,发现不是代码不全,就是jar不匹配. 我这里共享了一个zxing的2.2版本的例子,也提供了下载地址.实现代码如下: package com.herman.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcep

3kb jQuery代码搞定各种树形选择的实现方法_jquery

自制Jquery树形选择插件. 对付各种树形选择(省市,分类..)90行Jquery代码搞定,少说废话直接上插件代码.稍后介绍使用说明.是之前写的一个插件的精简版. 1.Jquery插件代码 (function (j) { j.fn.attrs = function (option) { var root = this, data = []; //默认参数 var def = { url: '/ajax/GetSort/', str: root.attr("str") || '0',

jsp页面分页 一句代码搞定

问题描述 本人最近写了一个在struts1.2spring2.0hibernate3.2的基础上使用分页在需要分页的页面只需一句代码就可以实现分页具体功能有上一页下一页首页尾页跳转到多少页每页显示多少条数据共多少页当前页还支持事件触发对当前页数据的排序要需要的请加QQ群java技术联盟106041212像群主索要或者在群里索取亦可java技术联盟欢迎你的加入使用者只需添加一个分页jar包加上一句代码就可以实现只需这样一句话一个标签例如:<paging:pagingform="address

批处理代码搞定Windows下Nginx+PHP(FastCGI)管理_DOS/BAT

注意修改下开始头部的几个变量的值 程序代码 复制代码 代码如下: SET NGINX_PATH=D: SET NGINX_DIR=D:\nginx-0.7.63\ SET PHP_DIR=D:\PHP\ ++++++++++++++++++代码开始++++++++++++++++ cls @ECHO OFF SET NGINX_PATH=D: SET NGINX_DIR=D:\nginx-0.7.63\ SET PHP_DIR=D:\PHP\ color 0a TITLE Nginx+PHP 管

轻松搞定数据访问层[续]

访问|数据 数据库表 Tbl_Teacher 数据字段名称 类型 说明 teaID Int 自动编号 teaCode Char(20) 教师员工号 teaName Nchar(10) ? teaGender Bit ? teaNation Nchar(6) ? teaAge TinyInt ? Tbl_Student 数据字段名称 类型 说明 stuID Int 自动编号 stuCode Char(20) 学生证号 stuTeacherCode Char(20) 班主任的员工号 stuName

轻松搞定数据访问层

访问|数据 下面实现的方法,可以把你从SQL的Add,Delete,Update,Select的重复劳动解脱出来 1.实体类2.访问类 现在以下表为例tblPerson(perID,perName,perGender,perOld,perNation) 实体类Person---------IDNameGenderOldNation 访问基类DataOper------------Shared DeleteShared AddShared UpdateShared Select 访问类Person

几行代码轻松搞定网页的简繁转换

简繁转换|网页 对网页进行简繁字体转换的方法一般有两种:一是使用<简繁通>这样的专业软件,另外一种是制作两套版本的网页.显然,这两种方法都较为麻烦,而且专业软件一般不能用于免费的空间.笔者在这里给大家提供一个非常简单的方法,只须在页面上添加几行代码就可以轻松搞定网页的简繁转换了.首先在http://www.knowsky.com/download/transform.js处下载用于简繁转换的js文件transform.js,复制到网站目录下,然后使用网页制作工具打开需要进行简繁转换的网页,