Python

""


# -
class RedCircle:
    def draw(self):
        print("")

class BlueCircle:
    def draw(self):
        print("")

class RedRectangle:
    def draw(self):
        print("")

class BlueRectangle:
    def draw(self):
        print("")

#
# 3 3 = 9

#
class Color:
    """ - """
    def apply_color(self):
        pass

class Shape:
    """ - """
    def __init__(self, color):
        self.color = color  #
   
    def draw(self):
        pass

# 3 + 3 = 6
# 3 3 = 9

python-bridge.png [python-bridge.png]

  1. Abstraction
  2. RefinedAbstraction
  3. Implementor
  4. ConcreteImplementor

1

from abc import ABC, abstractmethod

class Color(ABC):
    """ - """
    @abstractmethod
    def apply_color(self):
        pass

class Red(Color):
    """ - """
    def apply_color(self):
        return ""

class Blue(Color):
    """ - """
    def apply_color(self):
        return ""

class Green(Color):
    """ - """
    def apply_color(self):
        return ""

2

class Shape(ABC):
    """ - """
    def __init__(self, color: Color):
        self.color = color  #
   
    @abstractmethod
    def draw(self):
        pass

class Circle(Shape):
    """ - """
    def draw(self):
        color_name = self.color.apply_color()
        print(f"{color_name}")

class Rectangle(Shape):
    """ - """
    def draw(self):
        color_name = self.color.apply_color()
        print(f"{color_name}")

class Triangle(Shape):
    """ - """
    def draw(self):
        color_name = self.color.apply_color()
        print(f"{color_name}")

3

#
def main():
    #
    red = Red()
    blue = Blue()
    green = Green()
   
    #
    red_circle = Circle(red)
    blue_rectangle = Rectangle(blue)
    green_triangle = Triangle(green)
   
    #
    print("=== ===")
    red_circle.draw()        #
    blue_rectangle.draw()    #
    green_triangle.draw()    #
   
    #
    red_rectangle = Rectangle(red)
    red_rectangle.draw()     #

if __name__ == "__main__":
    main()

1

from abc import ABC, abstractmethod

#
class MessageSender(ABC):
    @abstractmethod
    def send(self, message):
        pass

class EmailSender(MessageSender):
    def send(self, message):
        return f"{message}"

class SMSSender(MessageSender):
    def send(self, message):
        return f"{message}"

class WeChatSender(MessageSender):
    def send(self, message):
        return f"{message}"

#
class Message(ABC):
    def __init__(self, sender: MessageSender):
        self.sender = sender
   
    @abstractmethod
    def send(self):
        pass

class UrgentMessage(Message):
    def send(self):
        message = "[] " + self.get_content()
        return self.sender.send(message)
   
    def get_content(self):
        return ""

class NormalMessage(Message):
    def __init__(self, sender: MessageSender, content):
        super().__init__(sender)
        self.content = content
   
    def send(self):
        return self.sender.send(self.content)

#
def message_example():
    email_sender = EmailSender()
    sms_sender = SMSSender()
   
    #
    urgent_sms = UrgentMessage(sms_sender)
    print(urgent_sms.send())  # []
   
    #
    normal_email = NormalMessage(email_sender, "")
    print(normal_email.send())  #

message_example()

2

#
class Device(ABC):
    @abstractmethod
    def turn_on(self):
        pass
   
    @abstractmethod
    def turn_off(self):
        pass
   
    @abstractmethod
    def set_volume(self, volume):
        pass

class TV(Device):
    def turn_on(self):
        return ""
   
    def turn_off(self):
        return ""
   
    def set_volume(self, volume):
        return f"{volume}"

class Radio(Device):
    def turn_on(self):
        return ""
   
    def turn_off(self):
        return ""
   
    def set_volume(self, volume):
        return f"{volume}"

#
class RemoteControl:
    def __init__(self, device: Device):
        self.device = device
   
    def toggle_power(self):
        return ""
   
    def volume_up(self):
        return ""
   
    def volume_down(self):
        return ""

class AdvancedRemoteControl(RemoteControl):
    def mute(self):
        return ""
   
    def set_channel(self, channel):
        return f"{channel}"

#
def remote_example():
    tv = TV()
    radio = Radio()
   
    basic_remote = RemoteControl(tv)
    advanced_remote = AdvancedRemoteControl(radio)
   
    print(basic_remote.toggle_power())  #
    print(advanced_remote.mute())       #

remote_example()


  • between abstraction and implementation

#
class BadShape:
    def __init__(self, color_type):
        if color_type == "red":
            self.color = Red()
        elif color_type == "blue":
            self.color = Blue()
        #

#
class GoodShape:
    def __init__(self, color: Color):  #
        self.color = color

1

2