结构型模式(二)桥接模式

 

一句话的概要

桥接模式注重分离抽象和实现,根据面向对象的封装变化原则,我们可以把实现部分的变化封装到另一个类中。

剧情

今天小明同学的弟弟过来,找小明玩耍。小明非常慷慨的把自己珍藏的奥迪双钻遥控车,送给他弟弟。

但是现在有一个问题,小明买遥控车的时候,自带了一个遥控器。但是 后来,小明又换了一个升级版的遥控器。

车,还是一辆车。但是两个遥控器有不同的功效。新版遥控器有一个自动校准方向的功能。

分析一下,同一个车,两个遥控器,功能还不一样。那么我们肯定是要把他们分离开。然后把变化进行封装。

接下来,我们就用桥接模式来构造以上的剧情。

任务一:首先构造奥迪双钻遥控车

首先,我们来定义一个车的抽象类。并且给他行驶的方法。

接着,我们创建奥迪双钻遥控车,来实现这个方法。

//遥控车抽象
    public abstract class Car
    {
        public abstract void Up();
        public abstract void Down();
        public abstract void Left();
        public abstract void Right();
    }

    //奥迪双钻
    public class Auldey : Car
    {
        public override void Down()
        {
            Console.WriteLine("车往后走");
        }

        public override void Left()
        {
            Console.WriteLine("车往左拐");
        }

        public override void Right()
        {
            Console.WriteLine("车往右拐");
        }

        public override void Up()
        {
            Console.WriteLine("车往前走");
        }
    }

代码很简单,实现了前后左右行驶方向。这个时候,我们的车就算完成了。接下来把车与遥控器进行桥接。

任务二:创建遥控器并与车桥接

我们来做一个遥控器的类,并且让它的方法都可以重写。这样,我们升级的遥控器,就可以重写方法,进行操作了。

//遥控器
    public class Remote
    {
        private Car car;
        public Remote(Car carU) {
            this.car = carU;
        }
        public virtual void Up()
        {
            car.Up();
        }
        public virtual void Down() {
            car.Down();
        }
        public virtual void Left() {
            car.Left();
        }
        public virtual void Right()
        {
            car.Right();
        }
    }
    //奥迪遥控器
    public class AuldeyRemote:Remote {
        public AuldeyRemote(Car carU) : base(carU) { }
        public override void Up()
        {
            Console.WriteLine("开始校准方向");
            base.Left();
            base.Right();
            Console.WriteLine("方向校准完毕");
            Console.WriteLine("------------------");
            base.Up();
        }
    }

我们把遥控器和车进行了桥接,并且重写了,前进这个方法。让他进行了校准操作。

接下来,我们测试一下

static void Main(string[] args)
        {
            Car car = new Auldey();
            Remote re = new AuldeyRemote(car);
            re.Up();
            re.Down();
            re.Right();
            Console.ReadLine();
        }

结构型模式(二)桥接模式_第1张图片

总结

桥接就是把抽象和实现分离开来。让实现部分可以再次进行变化。

常用场景:一个对象有多个维度的变化,需要将这些维度抽离出来,让且独立变化。

选择关键点:是否可以将对象拆成不相干的维度。

By~ 下一节:结构型模式(三)装饰器模式

你可能感兴趣的:(结构型模式(二)桥接模式)