博客
关于我
设计模式-结构型-组合模式
阅读量:186 次
发布时间:2019-02-28

本文共 1558 字,大约阅读时间需要 5 分钟。

文章目录

组合模式

概述

  • 将对象组合成树形结构以表示“部分和整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性

对象

  • 抽象组件(Component)
  • 叶子组件(Leaf)
  • 复合组件(Composite)
  • 客户端(Client)

适用场景

  • 表示对象的“部分与整体”层次结构
  • 希望用户忽略组合对象与单个对象的不同,用户统一的使用组合结构中的所有对象

例子

# 假设存在多个图形,并且可以通过基本图形组合成复合图形from abc import ABCMeta, abstractmethod# 抽象组件class Graphic(metaclass=ABCMeta):        @abstractmethod    def draw(self):        pass#叶子组件class Point(Graphic):    def __init__(self, x, y):        self.x = x        self.y = y        def __str__(self):        return f"Point({self.x}, {self.y})"    def draw(self):        print(str(self))class Line(Graphic):    def __init__(self, p1, p2):        self.p1 = p1        self.p2 = p2        def __str__(self):        return f"Line[{self.p1}, {self.p2}]"        def draw(self):        print(str(self))# 复合组件class Picture(Graphic):    def __init__(self, iterable):        self.children = []        for i in iterable:            self.add(i)        def add(self, grophic):        self.children.append(grophic)        def draw(self):        print("---复合图形---")        for i in self.children:            i.draw()        print("---复合图形---")print("-----------pic1-------------------")p1 = Point(2,3)l1 = Line(Point(3,4), Point(6,7))l2 = Line(Point(3,5), Point(6,8))pic1 = Picture([p1, l1, l2])pic1.draw()print("-----------pic2-------------------")p2 = Point(3,3)l3 = Line(Point(4,4), Point(7,7))l4 = Line(Point(5,5), Point(8,8))pic2 = Picture([p2, l3, l4])pic2.draw()print("-----------pic-------------------")pic = Picture([pic1, pic2])pic.draw()

优点

  • 定义了包含基本对象和组合对象的层次结构
  • 简化了客户端代码,客户端可以一致的使用组合对象和单个对象
  • 更容易增加新类型组件

转载地址:http://duec.baihongyu.com/

你可能感兴趣的文章
Mysql学习第一课-mysql的定义及sql语句
查看>>
mysql安全模式: sql_safe_updates
查看>>
mysql安装,卸载,连接
查看>>
MySQL安装之没有配置向导
查看>>
mysql安装出现 conflicts with mysql*的解决办法
查看>>
mysql安装卡在最后一步解决方案(附带万能安装方案)
查看>>
mysql安装和启动命令小结
查看>>
Mysql安装教程(命令行)
查看>>
mysql安装版安装
查看>>
MySQL安装配置教程(非常详细),从零基础入门到精通,看完这一篇就够了
查看>>
mysql安装配置简介
查看>>
MySQL定义和变量赋值
查看>>
mysql定时任务事件清理单表数据
查看>>
MySQL定时器Events
查看>>
mysql实战01|基础架构:一条SQL查询语句是如何执行的?
查看>>
Mysql实战之数据备份
查看>>
MySQL实战教程:从小白到大神的进阶之路!
查看>>
mysql实现成绩排名
查看>>
Mysql客户端中文乱码问题解决
查看>>
mysql客户端工具使用
查看>>