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科学计算之NumPy入门教程
Jan 15 Python
Python实现抢购IPhone手机
Feb 07 Python
为什么入门大数据选择Python而不是Java?
Mar 07 Python
Python 调用PIL库失败的解决方法
Jan 08 Python
使用coverage统计python web项目代码覆盖率的方法详解
Aug 05 Python
python实现的生成word文档功能示例
Aug 23 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
Python Numpy,mask图像的生成详解
Feb 19 Python
最小二乘法及其python实现详解
Feb 24 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
详解python os.path.exists判断文件或文件夹是否存在
Nov 16 Python
教你使用TensorFlow2识别验证码
Jun 11 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
程序员编程十条戒律
2009/07/09 PHP
ThinkPHP3.1新特性之命名范围的使用
2014/06/19 PHP
PHP获取数组中指定的一列实例
2017/12/27 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
Javascript 复制数组实现代码
2009/11/26 Javascript
js 格式化时间日期函数小结
2010/03/20 Javascript
一个字符串反转函数可实现字符串倒序
2014/09/15 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
关于vue面试题汇总
2018/03/20 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
webpack优化的深入理解
2018/12/10 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
Python实现发送QQ邮件的封装
2017/07/14 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
介绍一下RMI的基本概念
2016/12/17 面试题
会计实习期自我鉴定
2013/10/06 职场文书
土木工程专业个人求职信
2013/12/30 职场文书
聚美优品的广告词
2014/03/14 职场文书
大学新学期计划书
2014/04/28 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
2015年计划生育责任书
2015/05/08 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技
python装饰器代码解析
2022/03/23 Python