博客
关于我
设计模式-结构型-组合模式
阅读量: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/

你可能感兴趣的文章
netty——Handler和pipeline
查看>>
Vue输出HTML
查看>>
netty——黏包半包的解决方案、滑动窗口的概念
查看>>
Netty中Http客户端、服务端的编解码器
查看>>
Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息
查看>>
Netty中实现多客户端连接与通信-以实现聊天室群聊功能为例(附代码下载)
查看>>
Netty中的组件是怎么交互的?
查看>>
Netty中集成Protobuf实现Java对象数据传递
查看>>
netty之 定长数据流处理数据粘包问题
查看>>
Netty事件注册机制深入解析
查看>>
netty代理
查看>>
Netty入门使用
查看>>
netty入门,入门代码执行流程,netty主要组件的理解
查看>>
Netty原理分析及实战(一)-同步阻塞模型(BIO)
查看>>
Netty原理分析及实战(三)-高可用服务端搭建
查看>>
Netty原理分析及实战(二)-同步非阻塞模型(NIO)
查看>>
Netty原理分析及实战(四)-客户端与服务端双向通信
查看>>
Netty发送JSON格式字符串数据
查看>>
Netty和Tomcat的区别已经性能对比
查看>>
Netty在IDEA中搭建HelloWorld服务端并对Netty执行流程与重要组件进行介绍
查看>>