21.桥接模式

定义

  • 将抽象和实现解耦,使得它们可以独立地变化。
  • 桥梁模式关注的是抽象和实现的分离,使得它们可以独立地发展;桥梁模式是结构型模式,侧重于软件结构。而策略模式关注的是对算法、规则的封装,使得算法可以独立于使用它的用户而变化;
  • 策略模式是行为型模式,侧重于对象行为。
  • 设计模式其实就是一种编程思想,没有固定的结构。要区分不同的模式,要多从语义和用途的角度去判断。

类图

例子

桥接前:

from abc import ABCMeta, abstractmethod  
  
  
# 引入ABCMeta和abstractmethod来定义抽象类和抽象方法  
  
class Shape(metaclass=ABCMeta):  
    """形状"""  
  
    def __init__(self, color):  
        self._color = color  
  
    @abstractmethod  
    def getShapeType(self):  
        pass  
  
    def getShapeInfo(self):  
        return self._color.getColor() + "的" + self.getShapeType()  
  
  
class Rectange(Shape):  
    """矩形"""  
  
    def __init__(self, color):  
        super().__init__(color)  
  
    def getShapeType(self):  
        return "矩形"  
  
  
class Ellipse(Shape):  
    """椭圆"""  
  
    def __init__(self, color):  
        super().__init__(color)  
  
    def getShapeType(self):  
        return "椭圆"  
  
  
class Color(metaclass=ABCMeta):  
    """颜色"""  
  
    @abstractmethod  
    def getColor(self):  
        pass  
  
  
class Red(Color):  
    """红色"""  
  
    def getColor(self):  
        return "红色"  
  
  
class Green(Color):  
    """绿色"""  
  
    def getColor(self):  
        return "绿色"  
  
  
# Version 2.0  
# =======================================================================================================================  
# 代码框架  
# ==============================  
  
  
# 基于框架的实现  
# ==============================  
  
  
# Test  
# =======================================================================================================================  
  
def testShap():  
    redRect = Rectange(Red())  
    print(redRect.getShapeInfo())  
    greenRect = Rectange(Green())  
    print(greenRect.getShapeInfo())  
  
    redEllipse = Ellipse(Red())  
    print(redEllipse.getShapeInfo())  
    greenEllipse = Ellipse(Green())  
    print(greenEllipse.getShapeInfo())  
  
  
testShap()

应用场景

  • 一个产品(或对象)有多种分类和多种组合,即两个(或多个)独立变化的维度,每个维度都希望独立进行扩展。
  • 因为使用继承或因为多层继承导致系统类的个数急剧增加的系统,可以改用桥接模式来实现。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇