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中使用ElementTree解析XML示例
Jun 02 Python
Django中模版的子目录与include标签的使用方法
Jul 16 Python
Python格式化日期时间操作示例
Jun 28 Python
详解flask入门模板引擎
Jul 18 Python
用于业余项目的8个优秀Python库
Sep 21 Python
Python中文件的写入读取以及附加文字方法
Jan 23 Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 Python
Python中的self用法详解
Aug 06 Python
python将时分秒转换成秒的实例
Dec 07 Python
Flask中sqlalchemy模块的实例用法
Aug 02 Python
python实现自动清理重复文件
Aug 24 Python
Python matplotlib多个子图绘制整合
Apr 13 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函数重载的替代方法--伪重载详解
2015/05/08 PHP
PHP在线调试执行的实现方法(附demo源码)
2016/04/28 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
jquery 上下滚动广告
2009/06/17 Javascript
JavaScript toFixed() 方法
2010/04/15 Javascript
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
键盘KeyCode值列表汇总
2013/11/26 Javascript
JavaScript生成的动态下雨背景效果实现方法
2015/02/25 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
无循环 JavaScript(map、reduce、filter和find)
2017/04/08 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
jQuery插件实现的日历功能示例【附源码下载】
2018/09/07 jQuery
学习jQuery中的noConflict()用法
2018/09/28 jQuery
详解javascript中的Error对象
2019/04/25 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
python字符串对其居中显示的方法
2015/07/11 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
大学生简单自荐信
2013/11/10 职场文书
如何写自我鉴定
2014/03/19 职场文书
老师对学生的寄语
2014/04/09 职场文书
银行金融服务方案
2014/06/11 职场文书
煤矿安全协议书
2014/08/20 职场文书
幼儿园教师节演讲稿
2014/09/03 职场文书
初三语文教学计划
2015/01/22 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
在职证明格式样本
2015/06/15 职场文书
党纪处分决定书
2015/06/24 职场文书
毕业生就业推荐表自我鉴定
2019/06/20 职场文书
三年级作文之小小梦想
2019/12/06 职场文书