设计模式 -- 组合模式 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:正在学习,如有不完善,欢迎探讨
划线
评论
复制
发布于: 2020 年 06 月 24 日阅读数: 52
破晓_dawn
关注
慢慢,稳稳 2017.12.06 加入
业余选手,但是有一颗向往专业的心
评论