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线程详解
Jun 24 Python
Python利用splinter实现浏览器自动化操作方法
May 11 Python
django配置连接数据库及原生sql语句的使用方法
Mar 03 Python
Django Sitemap 站点地图的实现方法
Apr 29 Python
Flask框架学习笔记之模板操作实例详解
Aug 15 Python
Python字典底层实现原理详解
Dec 18 Python
修改Pandas的行或列的名字(重命名)
Dec 18 Python
Python关于__name__属性的含义和作用详解
Feb 19 Python
pandas读取csv文件提示不存在的解决方法及原因分析
Apr 21 Python
小结Python的反射机制
Sep 28 Python
Jupyter Notebook安装及使用方法解析
Nov 12 Python
python-地图可视化组件folium的操作
Dec 14 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简单实现查询数据库返回json数据
2015/04/16 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
可以将word转成html的js代码
2010/04/11 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
2019/07/19 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
[56:46]Liquid vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[52:40]完美世界DOTA2联赛PWL S2 Magma vs GXR 第一场 11.29
2020/12/02 DOTA
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
Python面向对象编程基础解析(二)
2017/10/26 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
Django 1.10以上版本 url 配置注意事项详解
2019/08/05 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
解决python对齐错误的方法
2020/07/16 Python
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
StubHub新加坡:购买和出售全球活动门票
2017/03/10 全球购物
高山背包:High Sierra
2017/11/23 全球购物
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
感恩父母的演讲稿
2014/05/06 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
八年级作文之友情
2019/11/25 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python