设计模式:桥接模式(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
《完结》
上一篇《适配器模式》 下一篇《装饰器模式》
标签: