欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

设计模式漫谈之桥接模式

程序员文章站 2022-03-26 17:58:24
今天调休了,闲来无事,再扯一个设计模式。我不是单纯的说设计模式,更多的是说编程思想上的东西。人心隔肚皮,人眼看到的不一定是真相,所以说女孩结婚后流的泪是当初眼拙脑残的结果。不过爱情中没有对错,爱情本来就是折磨死人不犯法。 说说继承与组合,继承偏重于对象本身具有;组合偏重于包括其他对象的东西(静的,动 ......

今天调休了,闲来无事,再扯一个设计模式。我不是单纯的说设计模式,更多的是说编程思想上的东西。人心隔肚皮,人眼看到的不一定是真相,所以说女孩结婚后流的泪是当初眼拙脑残的结果。不过爱情中没有对错,爱情本来就是折磨死人不犯法。

说说继承与组合,继承偏重于对象本身具有;组合偏重于包括其他对象的东西(静的,动的)。设计层面的东西都是抽象的,所以要用抽象或接口来隔离实际功能。

不扯了,今天说桥接模式,这种结构型模式都是对象之间关系的模式。在数据库模型中,1对1的关系,只用把某个表的主键存在另一个表中,1对多的关系转成面向对象的时候就是多属于1,所以只用把1的主键放在多中。多对多的关系,可以转成两个1对多,就是需要建中间表。

 

直接上例子,我来解释例子吧。

//这个是抽象类,表示思想上的东西,只描述抽象的东西。

//比如我有个功能,我还知道某种东西可以实现这个功能。

abstract class HandsetBrand
{

//存了一个抽象引用
protected HandsetSoft soft;

//给引用赋值对象

//this就是一个占位实例

public void SetHandsetSoft(HandsetSoft soft)
{
this.soft = soft;
}
//定义一个约束(抽象方法我也称为约束)
public abstract void Run();

}

//这个对象拥有此功能

//这是一种继承与组合的混合使用

class HandsetBrandN : HandsetBrand
{
public override void Run()
{
soft.Run();
}
}

//同样这个对象拥有这个功能。

class HandsetBrandM : HandsetBrand
{
public override void Run()
{
soft.Run();//其实我内部是通过其他对象实现我这个功能的。
}
}

//这种抽象的对象可以实现这个功能

abstract class HandsetSoft
{

public abstract void Run();
}

//具体的实现者

class HandsetGame : HandsetSoft
{
public override void Run()
{
Console.WriteLine("运行手机游戏");
}
}

//具体的实现者

class HandsetAddressList : HandsetSoft
{
public override void Run()
{
Console.WriteLine("运行手机通讯录");
}
}

 

HandsetBrand ab;
ab = new HandsetBrandN();

//桥接就是连接了对象HandsetBrand与HandsetSoft 

ab.SetHandsetSoft(new HandsetGame());
ab.Run();

ab.SetHandsetSoft(new HandsetAddressList());
ab.Run();

 

总结:这种结构型模式就是描述对象与对象之间关系的。人又称为社会人,假如人与人或人与其他对象没关系,那这个人活不长,没有研究价值。所以在内存中,我们运行的对象是有关系的对象。面向对象正是描述对象之间关系的,最常用的关系继承,组合,接口实现等