极速理解设计模式系列:7.桥接模式(Bridge Pattern)

本文通过实例详细解析了桥接模式的实现原理。介绍了抽象类、扩充抽象类、实现类接口及具体实现类的概念,展示了如何利用这些角色实现不同类型的对象之间的解耦。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

四个角色:抽象类(Abstraction)、扩充抽象类(RefinedAbstraction)、实现类接口(Implementor)、具体实现类(ConcreteImplementor) 

        抽象类(Abstraction):主控类,内部有一个实现类接口(Implementor)的对象可调用。

        扩充抽象类(RefinedAbstraction):扩充抽象类,个性定制自身行为和属性继承于Abstraction。

        实现类接口(Implementor):被操作类。

        具体实现类(ConcreteImplementor) :继承并实现Implementor。

 实现思路:多个扩充抽象类继承于Abstraction主控类,并且操作其内部的Implementor的行为。以此达到控制多种具体实现类的目的。这是一个多对多的关系。

 类图:

        应用场景:人听音乐,人有很多种人(年轻人、老年人、中年人、小孩子等),音乐有很多种(摇滚音乐、乡村音乐、爵士音乐、流行音乐等)。

        分析:不同的人可以听不同种类的音乐,人的种类是会变化的,音乐的种类也是活动可变的,在这里将人和音乐抽象出来,并且将音乐的抽象放入人的抽象中去,这样人听什么音乐将有客户端决定。

        下面我们在控制台程序去演示一下如何使用Bridge Pattern:

        一、 抽象类(Abstraction)

复制代码
     //抽象类(Abstraction)
abstract class People
{
private Music music;

public Music Music
{
get { return music; }
set { music = value; }
}

public abstract void StartListen();
}
复制代码

        二、扩充抽象类(RefinedAbstraction)

复制代码
   // 扩充抽象类(RefinedAbstraction)
class YoungPeople : People
{
public override void StartListen()
{
Console.Write(
"年轻人在听");
Music.Play();
}
}
// 扩充抽象类(RefinedAbstraction)
class OldPeople : People
{
public override void StartListen()
{
Console.Write(
"老年人在听");
Music.Play();
}
}
复制代码

        三、实现类接口(Implementor)

    // 实现类接口(Implementor)
abstract class Music
{
public abstract void Play();
}

        四、具体实现类(ConcreteImplementor) 

复制代码
    // 具体实现类(ConcreteImplementor) 
class RockMusic : Music
{
public override void Play()
{
Console.WriteLine(
"摇滚歌曲");
}
}
// 具体实现类(ConcreteImplementor)
class CountryMusic : Music
{
public override void Play()
{
Console.WriteLine(
"乡村歌曲");
}
}
复制代码

        五、客户端(Client)

复制代码
    class Program
{
static void Main(string[] args)
{
//客户端实现。
People youngPeople = new YoungPeople();

youngPeople.Music
= new RockMusic();
youngPeople.StartListen();

youngPeople.Music
= new CountryMusic();
youngPeople.StartListen();
Console.WriteLine(
"------------------");

People oldPeople
= new OldPeople();
oldPeople.Music
= new CountryMusic();
oldPeople.StartListen();

Console.ReadLine();
}
}
复制代码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值