zoukankan      html  css  js  c++  java
  • 极速理解设计模式系列:7.桥接模式(Bridge Pattern)

    四个角色:抽象类(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();
    }
    }

            如需源码请点击 BridgePattern.rar  下载。

  • 相关阅读:
    Web 跨域请求(OCRS) 前端解决方案
    接口与抽象
    观察者模式
    建造者模式(Builder)
    外观设计模式 (Facade)
    模板方法模式( TemplateMethod)
    原型模式(ProtoType)
    简单工厂法( Factory Method)
    backup与recover
    Oracle自动备份脚本的实现
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2179672.html
Copyright © 2011-2022 走看看