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

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

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方法的,就是不知道这和我理解的桥接者模式是否是一样的,毕竟今天刚学桥接者,怕理解错了之类的。欢迎大神指点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值