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实现Smtplib发送带有各种附件的邮件实例
Jun 05 Python
Python实现的密码强度检测器示例
Aug 23 Python
python实现报表自动化详解
Nov 16 Python
python+splinter自动刷新抢票功能
Sep 25 Python
Python3中bytes类型转换为str类型
Sep 27 Python
numpy下的flatten()函数用法详解
May 27 Python
对pyqt5多线程正确的开启姿势详解
Jun 14 Python
python实现微信小程序用户登录、模板推送
Aug 28 Python
python中open函数的基本用法示例
Sep 07 Python
使用python 的matplotlib 画轨道实例
Jan 19 Python
Python容器类型公共方法总结
Aug 19 Python
利用python批量爬取百度任意类别的图片的实现方法
Oct 07 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
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
php使用base64加密解密图片示例分享
2014/01/20 PHP
php中session与cookie的比较
2015/01/27 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
2018/09/07 PHP
jQuery 表单验证扩展代码(二)
2010/10/20 Javascript
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
Three.js快速入门教程
2016/09/09 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
2017/10/26 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
js编写简易的计算器
2020/07/29 Javascript
Python的净值数据接口调用示例分享
2016/03/15 Python
使用Python的Flask框架来搭建第一个Web应用程序
2016/06/04 Python
Python中__init__.py文件的作用详解
2016/09/18 Python
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
python list的index()和find()的实现
2020/11/16 Python
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
股份合作协议书
2014/04/12 职场文书
求职者怎样写自荐信
2014/04/13 职场文书
大学自主招生推荐信
2014/05/10 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
写给媳妇的检讨书
2015/05/06 职场文书
宾馆客房管理制度
2015/08/06 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书