网站建设厘金手指排名二二,网站建网站建设企业,网站建设字体变色代码,wordpress iis 404上一篇《适配器模式》 下一篇《装饰器模式》
简介#xff1a;
桥接模式#xff0c;它是一种结构型设计模式#xff0c;它的主要目的是将抽象部分与具体实现部分分离#xff0c;使它们都可以独立地变化。…上一篇《适配器模式》 下一篇《装饰器模式》
简介
桥接模式它是一种结构型设计模式它的主要目的是将抽象部分与具体实现部分分离使它们都可以独立地变化。桥接模式通过使用封装、聚合及继承等行为让不同的类承担不同的职责从而把抽象Abstraction与行为实现Implementation分离开来以保持各部分的独立性以及应对他们的功能扩展。
桥接模式的结构包括以下主要角色 1、抽象类AbstractClass定义了抽象接口并实现了部分功能。 2、具体实现类ConcreteClass实现了抽象类所定义的具体接口完成抽象类的功能实现。 3、桥接类BridgeClass将抽象类和具体实现类连接起来使得它们可以独立地变化。
桥接模式的使用场景 1、系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性避免在两个层次之间建立静态的继承联系。此时可以通过桥接模式使他们在抽象层建立一个关联关系。 2、系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。 3、一个类存在两个独立变化的维度而这两个维度都需要进行扩展。
桥接模式的创建步骤 1、创建抽象类AbstractClass它定义了抽象接口并实现了部分功能。 2、创建具体实现类ConcreteClass它实现了抽象类所定义的具体接口完成抽象类的功能实现。 3、创建桥接类BridgeClass它将抽象类和具体实现类连接起来使得它们可以独立地变化。
桥接模式的优点主要包括 1、分离抽象及其实现部分桥接模式通过将抽象部分与实现部分分离使得它们可以独立地变化。这种分离有助于降低对实现部分编译时刻的依赖性当改变一个实现类时并需要重新编译抽象类和它的客户程序。同时接口与实现分离有助于分层从而产生更好的结构化系统系统的高层部分仅需知道抽象类和具体实现类即可。 2、提高可扩充性桥接模式使得抽象类和具体实现类可以独立地变化因此可以独立地对它们进行扩展。这种扩展能力有助于提高系统的可维护性和可重用性。 3、优秀的扩展能力桥接模式使得抽象类和具体实现类可以独立地变化因此可以灵活地添加新的具体实现类以满足新的需求。这种扩展能力使得系统能够适应未来的变化和发展。
总之桥接模式通过将抽象部分与实现部分分离提高了系统的可维护性、可重用性和可扩展性同时降低了系统的复杂性。
桥接模式的缺点主要包括 1、增加了系统的理解和设计难度。由于关联关系建立在抽象层要求开发者一开始就针对抽象层进行设计与编程正确识别出系统中两个独立变化的维度并不容易。 2、可能增加系统的复杂性。对于一些不希望使用继承或因为多层继承导致系统类的个数剧增的场景可能需要考虑使用桥接模式这会增加系统的复杂性和理解难度。
总之桥接模式虽然可以提高系统的可维护性、可重用性和可扩展性但也增加了系统的复杂性和理解难度。因此在使用桥接模式时需要权衡其优缺点根据实际需求进行选择。 示例
一、C#桥接模式
以下是一个示例展示了如何在C#中实现桥接模式
using System; namespace BridgePatternExample
{ // 抽象类 public abstract class Abstraction { protected Implementor implementor; public void SetImplementor(Implementor implementor) { this.implementor implementor; } public abstract void Operation(); } // 具体实现类 public class ConcreteAbstraction : Abstraction { public override void Operation() { implementor.Operation(); } } // 实现接口 public interface Implementor { void Operation(); } // 具体实现类1 public class ConcreteImplementor1 : Implementor { public void Operation() { Console.WriteLine(Concrete Implementor 1 operation); } } // 具体实现类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 《完结》
上一篇《适配器模式》 下一篇《装饰器模式》