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中pycurl库的用法实例
Sep 30 Python
Python多线程编程(八):使用Event实现线程间通信
Apr 05 Python
Python实现导出数据生成excel报表的方法示例
Jul 12 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
Aug 30 Python
python 列表,数组和矩阵sum的用法及区别介绍
Jun 28 Python
对python中矩阵相加函数sum()的使用详解
Jan 28 Python
python tornado使用流生成图片的例子
Nov 18 Python
python3中利用filter函数输出小于某个数的所有回文数实例
Nov 24 Python
python:HDF和CSV存储优劣对比分析
Jun 08 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
Jun 30 Python
如何用 Python 处理不平衡数据集
Jan 04 Python
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 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
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
smarty模板引擎基础知识入门
2015/03/30 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
2013/04/25 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
js实现动态时钟
2020/03/12 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
vue props 一次传多个值实例
2020/07/22 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
go语言计算两个时间的时间差方法
2015/03/13 Python
python flask 多对多表查询功能
2017/06/25 Python
Python编程产生非均匀随机数的几种方法代码分享
2017/12/13 Python
django1.11.1 models 数据库同步方法
2018/05/30 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
python绘制规则网络图形实例
2019/12/09 Python
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
巴黎一票通:The Paris Pass
2018/02/10 全球购物
Prototype如何实现页面局部定时刷新
2013/08/06 面试题
生产车间实习自我鉴定
2013/09/23 职场文书
成语的广告词
2014/03/19 职场文书
团队队名口号大全
2014/06/06 职场文书
2014年秘书工作总结
2014/11/25 职场文书
教师个人教学总结
2015/02/11 职场文书
英语通知范文
2015/04/22 职场文书
小学家长意见怎么写
2015/06/03 职场文书
谢师宴学生致辞
2015/07/27 职场文书
小学体育教学随笔
2015/08/14 职场文书