设计模式笔记——桥接者模式
来源:互联网 发布: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方法的,就是不知道这和我理解的桥接者模式是否是一样的,毕竟今天刚学桥接者,怕理解错了之类的。欢迎大神指点。
阅读全文
0 0
- 设计模式笔记——桥接者模式
- 设计模式笔记——策略模式
- 设计模式笔记——装饰模式
- 设计模式笔记——观察者模式
- 设计模式笔记——工厂模式
- 设计模式笔记——MVC模式
- 设计模式笔记——工厂模式
- 设计模式笔记——创建者模式
- 设计模式笔记——原型模式
- 设计模式笔记——适配器模式
- 设计模式笔记——策略模式
- 设计模式学习笔记—外观模式
- 设计模式学习笔记—观察者模式
- 设计模式学习笔记—代理模式
- 设计模式学习笔记—组合模式
- 设计模式学习笔记—命令模式
- 设计模式学习笔记—策略模式
- 设计模式学习笔记—外观模式
- [leetcode]312. Burst Balloons
- [SpringMVC] SpringMVC介绍
- Java高级特性之一动态代理
- 现代OpenGL教程-lesson1
- 安卓高级控件之ViewPager
- 设计模式笔记——桥接者模式
- 【Python】 Missing parentheses in call to 'print'
- 如何获取 chosen chosen.jquery.js 选中的值
- SSH—Struts2拦截器的应用(防止未登录用户进行操作)
- 拆装机
- 工作中常用 的自定义函数
- 磁盘分区
- 工作中常用 的自定义函数
- 注册表