设计模式 -- 组合模式 demo

发布于: 2020 年 06 月 24 日

定义:设计模式适合处理树状结构,最典型如windows的窗口。他使得用户可以使用一致的方法操作单个对象和组合对象。

例子

用组合设计模式编写程序,打印输出图1窗口,窗口组件的树结构如图2所示。

打印输出参考示例参考图3

python代码示例

# -*- encoding: utf-8 -*-
class formInterface(object):
# python 中没有接口,通过将函数设置为抛出异常的方式,模拟接口
def draw(self):
raise Exception("interface can't be called")
class baseForm(formInterface):
def __init__(self, fname='', ftype=''):
self.name = fname
self.type = ftype
self.subform = []
def draw(self):
print "print %s(%s)" % (self.type, self.name)
for bform in self.subform:
bform.draw()
def add_sub(self, subform):
if isinstance(subform, baseForm):
self.subform.append(subform)
else:
print 'add subform error, sub form must be type of baseForm'
class winForm(baseForm):
def __init__(self, fname=''):
super(winForm, self).__init__(fname, 'WinForm')
class picture(baseForm):
def __init__(self, fname=''):
super(picture, self).__init__(fname, 'Picture')
class button(baseForm):
def __init__(self, fname=''):
super(button, self).__init__(fname, 'Button')
class frame(baseForm):
def __init__(self, fname=''):
super(frame, self).__init__(fname, 'Frame')
class lable(baseForm):
def __init__(self, fname=''):
super(lable, self).__init__(fname, 'Lable')
class textBox(baseForm):
def __init__(self, fname=''):
super(textBox, self).__init__(fname, 'TextBox')
class passwordBox(baseForm):
def __init__(self, fname=''):
super(passwordBox, self).__init__(fname, 'PasswordBox')
class checkBox(baseForm):
def __init__(self, fname=''):
super(checkBox, self).__init__(fname, 'CheckBox')
class linkLable(baseForm):
def __init__(self, fname=''):
super(linkLable, self).__init__(fname, 'LinkLable')
def main():
winform = winForm("WINDOW窗口")
pic = picture("LOGO图片")
button1 = picture("登陆")
button2 = picture("注册")
fra = frame("FRAME1")
lab1 = lable("用户名")
txtbox = textBox("文本框")
lab2 = lable("密码")
passbox = passwordBox("密码框")
checkbox = checkBox("复选框")
textbox = textBox("记住用户名")
linklable = linkLable("忘记用户名")
winform.add_sub(pic)
winform.add_sub(button1)
winform.add_sub(button2)
winform.add_sub(fra)
fra.add_sub(lab1)
fra.add_sub(txtbox)
fra.add_sub(lab2)
fra.add_sub(passbox)
fra.add_sub(checkbox)
fra.add_sub(textbox)
fra.add_sub(linklable)
winform.draw()
if __name__ == "__main__":
main()

手写单例模式作业:https://xie.infoq.cn/article/ff2a5b5664d33c4c42edc9b7d

PS:正在学习,如有不完善,欢迎探讨

用户头像

破晓_dawn

关注

慢慢,稳稳 2017.12.06 加入

业余选手,但是有一颗向往专业的心

评论

发布
暂无评论
设计模式--组合模式demo