最简单的桥接模式

设计模式目录
桥接模式-坦克大战-c#
桥接模式-坦克大战-js

桥接模式
几种模式的对比分析
目的:某个机能有两个维度的变化,那么把这个机能分别交给两个对象对负责,让他俩组合来完成任务。
这样当构建丰富多彩的机能时,只需要更小的复杂度就能实现。
记录:这个模式其实本身是面向对象编程的基础,任何两个对象都可以发生桥接,那是不是发生了桥接就叫桥接模式呢。理论上这么说应该也没有问题,但桥接这么模式强调的时桥接后形成组合功能的丰富。
https://download.csdn.net/download/xie__jin__cheng/10962753(这是桥接模式的源码)
桥接模式没有什么特别说明的,就是多态的一个简单应用。
因为默认设置成了5分下载的条件,所以将代码和部分说明粘贴如下:
需求:
在这里插入图片描述上图是根据该需求进行的简单继承的方式实现的设计,
下图是采用桥接模式的设计(并对两种方式做了对比说明)

需求变更说说桥接和原型。
刚才看原型模式的时候,原型模式在应对变化的时候,也和桥接的思想一样,用的是组合的思想。
这和这里的桥接思想是一样的,桥接本质上就是一种组合。
这里对需求的变化,附近机能的变化,最终采取了桥接的方式,来应对变化。
这都是用的设计模式中的组合聚会原则。

代码:

#include <iostream>

using namespace std;

//
// ---------------------------------抽象层------------------------------
//
class Tank
{
public:
	virtual void Shot(){}
};

class Decorator
{
private:
	Tank& tank;
public:
	Decorator(Tank& tank_object):tank(tank_object){}
	virtual void Shot()
	{
		tank.Shot();
	}
};

//
// ------------------------------实施层----------------------------------
//

//Tank---------------------------------------------------------------
class TankB70: public Tank
{
public:
	virtual void Shot()
	{
		cout<<"70 gong li she cheng"<<"\n";	
	}
};
class TankB90: public Tank
{
public:
	virtual void Shot()
	{
		cout<<"90 gong li she cheng"<<"\n";	
	}
};

//Decorator---------------------------------------------------------------
class DecoratorA: public Decorator
{
public:
	DecoratorA(Tank& tank_object):Decorator(tank_object)
	{

	}
	void HongWaixian()
	{
		cout<<"hong wai xian"<<"\n";
	}
public:
	virtual void Shot()
	{
		Decorator::Shot();
		HongWaixian();
	}
};
class DecoratorB: public Decorator
{
private:
	void ShuiLuLiangXi()
	{
		cout<<"shui lu liang xi"<<"\n";
	}
public:
	DecoratorB(Tank& tank_object):Decorator(tank_object)
	{

	}
	virtual void Shot()
	{
		Decorator::Shot();
		ShuiLuLiangXi();	
	}
};
class DecoratorC: public Decorator
{
private:
	void WeiXingDingWei()
	{
		cout<<"wei xing ding wei"<<"\n";
	}
public:
	DecoratorC(Tank& tank_object):Decorator(tank_object)
	{

	}
	virtual void Shot()
	{
		Decorator::Shot();
		WeiXingDingWei();
	}
};

//
// 客户端(调用层)
//
int main()
{
	TankB90* tank_90 = new TankB90();

	Decorator* Decorator_a = new DecoratorA(*tank_90);
	Decorator_a->Shot();
	//Decorator* Decorator_b = new DecoratorB(*Decorator_a);
	//Decorator_b->Shot();

	int a;
	cin>>a;
	return 0;
}
桥接模式是一种结构型设计模式,它可以将抽象部分与实现部分分离,使它们可以独立地变化。在桥接模式中,抽象部分和实现部分之间通过一个桥接接口相互连接。 下面是一个简单的 Java 桥接模式示例: 首先,我们需要定义一个实现接口(Implementor): ```java public interface Implementor { void operationImpl(); } ``` 然后,我们需要定义一个抽象类(Abstraction),它包含一个实现接口的引用: ```java public abstract class Abstraction { protected Implementor impl; public Abstraction(Implementor impl) { this.impl = impl; } public abstract void operation(); } ``` 接下来,我们需要定义具体的实现类(ConcreteImplementorA 和 ConcreteImplementorB): ```java public class ConcreteImplementorA implements Implementor { @Override public void operationImpl() { System.out.println("ConcreteImplementorA.operationImpl() called."); } } public class ConcreteImplementorB implements Implementor { @Override public void operationImpl() { System.out.println("ConcreteImplementorB.operationImpl() called."); } } ``` 最后,我们定义一个具体的抽象类(RefinedAbstraction),它通过实现抽象类中的 operation() 方法来调用实现接口中的 operationImpl() 方法: ```java public class RefinedAbstraction extends Abstraction { public RefinedAbstraction(Implementor impl) { super(impl); } @Override public void operation() { System.out.println("RefinedAbstraction.operation() called."); impl.operationImpl(); } } ``` 现在我们可以使用桥接模式来创建一个 RefineAbstraction 对象,并将其连接到 ConcreteImplementorA 或 ConcreteImplementorB 对象: ```java public static void main(String[] args) { Implementor implA = new ConcreteImplementorA(); Implementor implB = new ConcreteImplementorB(); Abstraction absA = new RefinedAbstraction(implA); Abstraction absB = new RefinedAbstraction(implB); absA.operation(); absB.operation(); } ``` 输出结果为: ``` RefinedAbstraction.operation() called. ConcreteImplementorA.operationImpl() called. RefinedAbstraction.operation() called. ConcreteImplementorB.operationImpl() called. ``` 这就是一个简单的 Java 桥接模式示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值