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数据库的连接实现方法与注意事项
Feb 27 Python
python使用str & repr转换字符串
Oct 13 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
python3实现windows下同名进程监控
Jun 21 Python
浅谈Python 递归算法指归
Aug 22 Python
Python根据服务获取端口号的方法
Sep 25 Python
在python3中实现更新界面
Feb 21 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
PyCharm最新激活码(2020/10/27全网最新)
Oct 27 Python
python 实现波浪滤镜特效
Dec 02 Python
PyQt5 显示超清高分辨率图片的方法
Apr 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
PHP中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
PHP 各种排序算法实现代码
2009/08/20 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
2016/08/05 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
JS实现焦点图轮播效果的方法详解
2016/12/19 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
JS实现图片懒加载(lazyload)过程详解
2020/04/02 Javascript
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[45:14]Optic vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
Python过滤列表用法实例分析
2016/04/29 Python
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
Python实现Kmeans聚类算法
2020/06/10 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
安德玛比利时官网:Under Armour比利时
2019/08/28 全球购物
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
高中毕业自我鉴定
2013/12/22 职场文书
六月份红领巾广播稿
2014/02/03 职场文书
怎么写好自荐书
2014/03/02 职场文书
企业宣传策划方案
2014/05/29 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
涨价通知怎么写
2015/04/23 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
创作书写之导游词实用技巧分享(干货)
2019/12/20 职场文书