欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

设计模式:桥接模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

墨初 知识笔记 49阅读

使用系统;命名空间BridgePatternExample { //抽象类公共抽象类抽象{受保护的实现者实现者;public void set Implementor(Implementor实现者){ this。实施者实施者;}公共抽象空的操作();} //具体实现类公共类具体抽象:抽象{ public override void Operation(){ implementor .operation();} } //实现接口公共接口实现者{ void Operation();} //具体实现类一公共类具体实现者1 :实现者{ public void Operation(){ Console .WriteLine(具体实现者一操作);} } //具体实现类2

 public class ConcreteImplementor2 : Implementor      {          public void Operation()          {              Console.WriteLine(Concrete Implementor 2 operation);          }      }      class Program      {          static void Main(string[] args)          {              Abstraction abstraction new ConcreteAbstraction();              abstraction.SetImplementor(new ConcreteImplementor1()); // 第一个实现类操作              abstraction.Operation(); // 输出 Concrete Implementor 1 operation              abstraction.SetImplementor(new ConcreteImplementor2()); // 第二个实现类操作              abstraction.Operation(); // 输出 Concrete Implementor 2 operation          }       }   } 二、java桥接模式

桥接模式通常通过以下方式实现

// 抽象类  public abstract class AbstractClass {      protected Implementor implementor;          public void setImplementor(Implementor implementor) {          this.implementor  implementor;      }          public abstract void operation();  }     // 具体实现类  public class ConcreteClass extends AbstractClass {      Override      public void operation() {          implementor.operation();      }  }     // 实现接口  public interface Implementor {      void operation();  }     // 具体实现类1  public class ConcreteImplementor1 implements Implementor {      Override      public void operation() {          System.out.println(Concrete Implementor 1 operation);      }  }     // 具体实现类2  public class ConcreteImplementor2 implements Implementor {      Override      public void operation() {          System.out.println(Concrete Implementor 2 operation);      }  }//在客户端中创建上下文对象并注入具体策略对象public class Main {      public static void main(String[] args) {          AbstractClass abstraction  new ConcreteClass();          abstraction.setImplementor(new ConcreteImplementor1()); // 第一个实现类操作          abstraction.operation(); // 输出 Concrete Implementor 1 operation          abstraction.setImplementor(new ConcreteImplementor2()); // 第二个实现类操作          abstraction.operation(); // 输出 Concrete Implementor 2 operation    }}
三、javascript桥接模式

在JavaScript中桥接实现方式如下

// 抽象类  class AbstractClass {    constructor(bridge) {      this.bridge  bridge;    }      operation() {      this.bridge.implementationOperation();    }  }    // 具体实现类  class ConcreteClass1 {    implementationOperation() {      console.log(ConcreteClass1 operation);    }  }    class ConcreteClass2 {    implementationOperation() {      console.log(ConcreteClass2 operation);    }  }    // 桥接类  class BridgeClass extends AbstractClass {    constructor(implementation) {      super(implementation);    }  }const bridge1  new BridgeClass(new ConcreteClass1());  const bridge2  new BridgeClass(new ConcreteClass2());      bridge1.operation(); // 输出 ConcreteClass1 operation  bridge2.operation(); // 输出 ConcreteClass2 operation
四、C桥接模式

以下是在C中实现桥接模式

#include <iostream>    // 抽象类  class AbstractClass {  public:      virtual void operation()  0;  };    // 具体实现类1  class ConcreteClass1 : public AbstractClass {  public:      void operation() override {          std::cout << ConcreteClass1 operation << std::endl;      }  };    // 具体实现类2  class ConcreteClass2 : public AbstractClass {  public:      void operation() override {          std::cout << ConcreteClass2 operation << std::endl;      }  };    // 桥接类  class BridgeClass {  public:      AbstractClass* abstract;      BridgeClass(AbstractClass* a) : abstract(a) {}      void operation() { abstract->operation(); }  };    int main() {      AbstractClass* a  new ConcreteClass1(); // 使用具体实现类1创建抽象类的对象      BridgeClass b(a); // 使用桥接类与抽象类的对象进行交互      b.operation(); // 输出 ConcreteClass1 operation      delete a; // 释放内存      a  new ConcreteClass2(); // 使用具体实现类2创建抽象类的对象      b.operation(); // 输出 ConcreteClass2 operation      delete a; // 释放内存      return 0;  }
五、python桥接模式

以下是在python中实现桥接模式

from abc import ABC, abstractmethod    # 抽象类  class AbstractClass(ABC):      abstractmethod      def operation(self):          pass    # 具体实现类1  class ConcreteClass1(AbstractClass):      def operation(self):          print(ConcreteClass1 operation)    # 具体实现类2  class ConcreteClass2(AbstractClass):      def operation(self):          print(ConcreteClass2 operation)    # 桥接类  class BridgeClass:      def __init__(self, abstract_class):          self.abstract_class  abstract_class            def operation(self):          self.abstract_class.operation()    # 使用示例  bridge1  BridgeClass(ConcreteClass1())  bridge2  BridgeClass(ConcreteClass2())  bridge1.operation() # 输出 ConcreteClass1 operation  bridge2.operation() # 输出 ConcreteClass2 operation
六、go桥接模式

以下是一个示例展示了如何在go中实现桥接模式

package main    import fmt    // 抽象类  type AbstractClass struct {      BridgeClass  }    func (ac *AbstractClass) Operation() {      ac.BridgeClass.Operation()  }    // 具体实现类1  type ConcreteClass1 struct{}    func (cc1 *ConcreteClass1) Operation() {      fmt.Println(ConcreteClass1 operation)  }    // 具体实现类2  type ConcreteClass2 struct{}    func (cc2 *ConcreteClass2) Operation() {      fmt.Println(ConcreteClass2 operation)  }    // 桥接类  type BridgeClass struct {      impl interface{}  }    func (bc *BridgeClass) Operation() {      bc.impl.Operation()  }    func main() {      abstract : &AbstractClass{&BridgeClass{&ConcreteClass1{}}}      abstract.Operation() // 输出 ConcreteClass1 operation        abstract.BridgeClass.impl  &ConcreteClass2{}      abstract.Operation() // 输出 ConcreteClass2 operation  }
七、PHP桥接模式

以下是一个示例展示了如何在PHP中实现桥接模式

<?php    // 抽象类  abstract class AbstractClass {      protected $bridge;            public function __construct(BridgeClass $bridge) {          $this->bridge  $bridge;      }            abstract public function operation();  }    // 具体实现类1  class ConcreteClass1 implements AbstractClass {      public function operation() {          echo ConcreteClass1 operation\n;      }  }    // 具体实现类2  class ConcreteClass2 implements AbstractClass {      public function operation() {          echo ConcreteClass2 operation\n;      }  }    // 桥接类  class BridgeClass {      protected $implementation;            public function __construct(Implementation $implementation) {          $this->implementation  $implementation;      }            public function operation() {          $this->implementation->operation();      }  }    // 使用示例  $bridge1  new BridgeClass(new ConcreteClass1());  $bridge2  new BridgeClass(new ConcreteClass2());  $bridge1->operation(); // 输出 ConcreteClass1 operation  $bridge2->operation(); // 输出 ConcreteClass2 operation


《完结》

上一篇《适配器模式》                                                               下一篇《装饰器模式》          

标签:
声明:无特别说明,转载请标明本文来源!