python3 简单实现组合设计模式


Posted in Python onJuly 02, 2020

组合模式是把一个类别归为一个整体,并且组织多个整体之间的关系,使用通过树形结构来描述所有整体。

一般的编写方式为一个类别对象下添加多个该对象的元素,该对象又为其它对象下的元素。简单来说就是一个学校有一个总部,总部下有有师资部、招生部;总部有分校,分校也有。

在我个人看来,设计模式的使用并不局限于书本描述的具体问题的解决,是需要丰富的业务经验才能更好的灵活应用,本人能力有限,在此也是给出一个简单的示例用来说明,额外的灵活运营需要看个人的编写方式。

首先新建一个学校的基类:

#根
class root:
  name = ''
  def __init__(self, name):
    self.name = name
  def add(self, root):
    pass

以上学校基类初始化方法为接收一个name,并且有一个抽象方法add。

有了一个学校基类后,具体新建一个学校类,继承root基类:

#学校类
class School(root):
  childrenroot = []
  def add(self, root):
    self.childrenroot.append(root)

在以上学校类中,继承了root基类,并且实现了add方法,接收root值,并且把它添加到 childrenroot 列表中,这样可以网当前对象下添加子节点,或者说添加下级对象。

新建一个招生办类以及一个师资部类:

#招生办
class StudentAdmissionDept(root):  
  def __init__(self, name):
    self.name = name
#师资部
class FacultyDepartment(root):  
  def __init__(self, name):
    self.name = name

以上内容很简单,都是继承于root,就一个初始化方法。

开始实现调用。首先新建一个学校总部对象,并且往这个总部对象下添加一个招生办对象以及一个师资部对象:

root = School('总部')
root.add(StudentAdmissionDept('总部招生办'))
root.add(FacultyDepartment('总部师资部'))

新建好总部对象后,往下添加分校区的对象。分校区的部门设置跟总校一致:

s1 = School('桂林校区')
s1.add(StudentAdmissionDept('桂林校区 招生办'))
s1.add(FacultyDepartment('桂林校区 师资部'))
root.add(s1)

在配置完第一个桂林校区后,使用root总部的add方法,添加当前桂林校区为下级。

再新建几个校区:

s2 = School('深圳校区')
s2.add(StudentAdmissionDept('深圳校区 招生办'))
s2.add(FacultyDepartment('深圳校区 师资部'))
root.add(s2)

s3 = School('广州校区')
s3.add(StudentAdmissionDept('广州校区 招生办'))
s3.add(FacultyDepartment('广州校区 师资部'))
root.add(s3)

以上配置方法跟第一个校区配置为root总部校区下级一致。

最后使用遍历打印出各个校区的名字:

print('\n',root.name,'下级学校层级:\n')

for i in root.childrenroot:
  print(i.name)

结果为:

python3 简单实现组合设计模式

由于没有排版,以上结果并没有很好的直观显示层级,剩下的只需要自己排版输出即可。

在当前文章对应的代码编写中,最后的新建校区及配置信息,可以新建一个类,封装好该调用、输出方法,可以很方便的使用组合设计模式。

完整代码如下:

#根
class root:
  name = ''
  def __init__(self, name):
    self.name = name
  def add(self, root):
    pass 
  
#学校类
class School(root):
  childrenroot = []
  def add(self, root):
    self.childrenroot.append(root) 

#招生办
class StudentAdmissionDept(root):  
  def __init__(self, name):
    self.name = name

 
#师资部
class FacultyDepartment(root):  
  def __init__(self, name):
    self.name = name
 
 
root = School('总部')
root.add(StudentAdmissionDept('总部招生办'))
root.add(FacultyDepartment('总部师资部'))

s1 = School('桂林校区')
s1.add(StudentAdmissionDept('桂林校区 招生办'))
s1.add(FacultyDepartment('桂林校区 师资部'))
root.add(s1)

s2 = School('深圳校区')
s2.add(StudentAdmissionDept('深圳校区 招生办'))
s2.add(FacultyDepartment('深圳校区 师资部'))
root.add(s2)

s3 = School('广州校区')
s3.add(StudentAdmissionDept('广州校区 招生办'))
s3.add(FacultyDepartment('广州校区 师资部'))
root.add(s3)  

print('\n',root.name,'下级学校层级:\n')

for i in root.childrenroot:
  print(i.name)

以上就是python3 简单实现组合设计模式的详细内容,更多关于Python 实现组合设计模式的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python实现unicode转中文及转换默认编码的方法
Apr 29 Python
python实现外卖信息管理系统
Jan 11 Python
详解pyqt5 动画在QThread线程中无法运行问题
May 05 Python
详解Python中的四种队列
May 21 Python
Python自动抢红包教程详解
Jun 11 Python
Python+PyQT5的子线程更新UI界面的实例
Jun 14 Python
python之生产者消费者模型实现详解
Jul 27 Python
python框架django项目部署相关知识详解
Nov 04 Python
python tornado使用流生成图片的例子
Nov 18 Python
python3 tkinter实现添加图片和文本
Nov 26 Python
pandas实现导出数据的四种方式
Dec 13 Python
python3美化表格数据输出结果的实现代码
Apr 14 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 #Python
django 装饰器 检测登录状态操作
Jul 02 #Python
详解用Python爬虫获取百度企业信用中企业基本信息
Jul 02 #Python
django 实现后台从富文本提取纯文本
Jul 02 #Python
详解用Python调用百度地图正/逆地理编码API
Jul 02 #Python
基于django2.2连oracle11g解决版本冲突的问题
Jul 02 #Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
Jul 02 #Python
You might like
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
PHP全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
php使用get_class_methods()函数获取分类的方法
2016/07/20 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
AngularJS入门教程之Helloworld示例
2016/12/25 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
centos 下面安装python2.7 +pip +mysqld
2014/11/18 Python
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
2015/05/05 Python
Python中取整的几种方法小结
2017/01/06 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
Python模块WSGI使用详解
2018/02/02 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
python多线程高级锁condition简单用法示例
2019/11/07 Python
将python安装信息加入注册表的示例
2019/11/20 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
Web页面中八种创建多列等高(等高列布局)的实现技术
2012/12/24 HTML / CSS
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
假日旅行社实习自我鉴定
2013/09/24 职场文书
小加工厂管理制度
2014/01/21 职场文书
石油工程专业毕业生求职信
2014/04/13 职场文书
物业品质提升方案
2014/06/08 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
2014年物流工作总结
2014/11/25 职场文书
全国劳模先进事迹材料(2016精选版)
2016/02/25 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL