设计模式笔记——桥接者模式

来源:互联网 发布:python string转list 编辑:程序博客网 时间:2024/06/06 20:03

桥接者模式,其主要作用是分离抽象类和实例,使他们都可以独立的变化,举个简单的列子来说,动物有很多种,每一种动物有可能有不同的叫声,比如狗是一种动物,狗的叫声是汪汪汪,猫也是一种动物,猫的叫声是喵喵喵。但是也可能突然有一天,有一只狗学会了猫叫(比如二哈,完全有可能),那此时这只狗的叫声又是喵喵喵了,同理,猫也可能发生同样的变化,也就是说,动物和动物的叫声,可以是相互独立变化的,下面在程序中,我们使用桥接者模式,来实现以下这个场景。
首先我们定义好动物的抽象类:

abstract class Animal    {        protected barkAPI b;        abstract void bark();    }

动物都会叫,于是我们在抽象类中,固定bark函数。
接下来是定义一个叫的接口:

static interface barkAPI    {        void bark();    }

然后我们分别实现狗叫的接口和猫叫的接口:

     class Miao implements barkAPI    {        @Override        public void bark() {            System.out.println("喵喵喵~");        }    }    class Wang implements barkAPI    {        @Override        public void bark() {            System.out.println("汪汪汪~");        }    }

这便是我们一开始所说的,桥接模式中,将“抽象”和“实现”分离开来的具体表现了,这便是“实现”了。
然后是具体的 狗和猫的类实现:

    class Dog extends Animal    {        Dog(barkAPI bark)        {            super.b=bark;        }        @Override        void bark() {            if(b==null)            {                System.out.println("我不知道怎么叫。。");            }            else            {                b.bark();            }        }    }    class Cat extends Animal    {        Cat(barkAPI bar)        {            b=bar;        }        @Override        void bark() {            if(b==null)            {                System.out.println("我不知道怎么叫。。");            }            else{                b.bark();            }        }    }

这是将抽象部分和实现部分合起来,然后查看一下我们在实际应用过程的应用。

        Miao m=new Miao();        Wang w=new Wang();        Cat cat=new Cat(m);        Dog dog=new Dog(w);        cat.bark();        dog.bark();

打印结果:
喵喵喵~
汪汪汪~
ps:在看完桥接者模式的时候,我其实当时立马就想到了Thread类,jdk中线程类的实现。还记得我们创建线程的三种方式嘛,其中有一种new Thread(new runnable(){void run(){})的写法。这难道不就是我们的桥接者模式嘛,将抽象的线程类和线程的具体执行内容分离开,用过runnable接口来桥接。不知道是不是的,我有看过Thread在jdk中的源码,确定他就是在thread类的run方法中执行rannable的run方法的,就是不知道这和我理解的桥接者模式是否是一样的,毕竟今天刚学桥接者,怕理解错了之类的。欢迎大神指点。

原创粉丝点击