写点什么

设计模式 -- 组合模式 demo

用户头像
破晓_dawn
关注
发布于: 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