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  下载。

  • 相关阅读:
    函数防抖和函数节流.md
    es6的展开运算符.md
    web安全-xss.md
    es6 数组实例中的find() 和 findIndex() 方法.md
    vuex的学习
    利用nodejs搭建本地服务器.md
    webpack的配置学习
    npm常用命令
    配置phpstorm支持less自动编译css
    Nginx配置中遇到到的问题和解决方案
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2179672.html
Copyright © 2011-2022 走看看