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三元运算符实现方法
Dec 17 Python
python实现保存网页到本地示例
Mar 16 Python
Windows下安装python2.7及科学计算套装
Mar 05 Python
python实现清屏的方法
Apr 30 Python
Python处理JSON时的值报错及编码报错的两则解决实录
Jun 26 Python
python定时关机小脚本
Jun 20 Python
Selenium的使用详解
Oct 19 Python
利用Python如何实现一个小说网站雏形
Nov 23 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
Python机器学习之逻辑回归
May 11 Python
Python Django框架介绍之模板标签及模板的继承
May 27 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
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
PHP及Zend Engine的线程安全模型分析
2011/11/10 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
2012/03/01 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
JavaScript通过join函数连接数组里所有元素的方法
2015/03/20 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
jquery插件bootstrapValidator表单验证详解
2016/12/15 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
详解Python中的__new__、__init__、__call__三个特殊方法
2016/06/02 Python
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
Python的垃圾回收机制详解
2019/08/28 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
2020/01/10 Python
python deque模块简单使用代码实例
2020/03/12 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
Python3.9新特性详解
2020/10/10 Python
医院护理人员的自我评价分享
2013/10/04 职场文书
批评与自我批评材料
2014/02/15 职场文书
试用期辞职信范文
2015/03/02 职场文书
东京审判观后感
2015/06/01 职场文书
爱岗敬业先进典型事迹材料(2016推荐版)
2016/02/26 职场文书
Pytest allure 命令行参数的使用
2021/04/18 Python
用几道面试题来看JavaScript执行机制
2021/04/30 Javascript