java常用设计模式九:桥接模式
一、概述
将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式。比如存在2个维度,第一个维度有一个抽象类A和对应的子类A1和A2;第二个维度有另一个接口B和对应的子类B1和B2;接口A依赖接口B。
所谓的独立变化就是当我们修改A1和A2或是修改B1和B2对方都不用修改。这种抽象依赖就像桥接。
二、示例

比如上图所示:动物(抽象类)走路(接口),动物有狗(具体类)和猫(具体类),路有大路(具体类)和小路(具体类),要实现的就是 “什么动物在什么路走路”,这就是一个2维度组合,而且2个维度都可以进行独立变化。
1)动物接口
public interface Animal {
void walk();
}
2)动物实现类
public class Dog implements Animal {
public void walk() {
System.out.println("狗走路");
}
}
public class Cat implements Animal {
public void walk() {
System.out.println("猫走路");
}
}
3)路抽象类
public abstract class Road {
protected Animal animal;
public Road(Animal animal){
this.animal = animal;
}
public abstract void place();
}
4)路的实现类
public class BigRoad extends Road {
public BigRoad(Animal animal) {
super(animal);
}
public void place() {
System.out.println("在大路上");
animal.walk();
}
}
package bridge.demo; /**
* @author Administrator
* @date 2019/01/11
*/
public class SmallRoad extends Road{ public SmallRoad(Animal animal) {
super(animal);
} public void place() {
System.out.println("在小路上");
animal.walk();
}
}
5)测试类
public class Client {
public static void main(String[] args){
Animal dog = new Dog();
Animal cat = new Cat();
Road road1= new BigRoad(dog);
Road road2= new SmallRoad(cat);
Road road3= new SmallRoad(dog);
Road road4= new SmallRoad(cat);
road1.place();
road2.place();
road3.place();
road4.place();
}
}
在大路上
狗走路
在小路上
猫走路
在小路上
狗走路
在小路上
猫走路
细心的人会发现:桥接模式与抽象工厂模式很相似,都是2个维度上的变化。但是有以下区别:
- 桥接模式属于结构型模式,不是以创建对象的为目的,一般对象的创建是交给Client类去new 一个对象,对象已经存在后,怎么来组合使用这些对象;
- 抽象工厂模式属于创建型模式,以创建对象为目的,一般会在工厂类内部提供new 一个对象的方法。
java常用设计模式九:桥接模式的更多相关文章
- Java设计模式13:常用设计模式之桥接模式(结构型模式)
1. Java之桥接模式(Bridge Pattern) (1)概述: 首先我们说一个生活中的例子: 就拿汽车在路上行驶的来说.即有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也 ...
- java常用设计模式总览
一.java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式. 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组 ...
- java面试题之----jdbc中使用的设计模式(桥接模式)
1.JDBC(JavaDatabase Connectivity) JDBC是以统一方式访问数据库的API. 它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracl ...
- java设计模式7——桥接模式
java设计模式7--桥接模式 1.桥接模式介绍 桥接模式是将抽象部分与它的实现部分分离,使他们都可以独立的变化.它是一种对象结构型模式,又称为柄体模式或接口模式. 2.解决问题 2.1.将复杂的组合 ...
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...
- php设计模式之桥接模式
php设计模式之桥接模式 一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 其实就是讲不相关的东西通过类(本例中是SendInfo)结合在一起,从而 ...
- JAVA常用设计模式(一、单例模式、工厂模式)
JAVA设计模式之单例模式 import java.util.HashMap; import java.util.Map; /** * 设计模式之单例模式 * 单例模式(Singleton Patte ...
- JAVA开发的23种设计模式之 --- 桥接模式
桥接模式 概述:将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化.如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构. 应用场景 实现系统可能有多 ...
- java设计模式之桥接模式
桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦.这种模式涉及到一个作为桥接的 ...
随机推荐
- vue-app项目,将px自动转化为rem
1. 安装lib-flexible: npm install --save lib-flexible 2.安装postcss-loader和postcss-px2rem: npm install -- ...
- mysql怎么查看是否支持分区
mysql从5.1开始支持分区功能 查询命令如下: mysql> show plugins like '%partiotion%'; mysql> show variables like ...
- Linux下打开超大文件方法
在Linux下用VIM打开大小几个G.甚至几十个G的文件时,是非常慢的. 这时,我们可以利用下面的方法分割文件,然后再打开. 1 查看文件的前多少行 head -10000 /var/lib/mysq ...
- Android TV开发 焦点控制
转载:http://www.eoeandroid.com/thread-264177-1-1.html 最近在做一款基于Android的互联网电视客户端,开发与phone/pad差不多,但是有一个值得 ...
- Svn启动窗口报错 Could not load file or assembly 'SharpSvn.dll' or one of its
win10 64位系统生成没问题,测试都没问题,结果换到win7 64位系统上,点开就出现,网上搜了下,通过以下方式解决, 必须把bin 文件夹全部删除,重新生成.要不还是会报错. Solve it. ...
- C++中string类
https://blog.csdn.net/sinat_36184075/article/details/54836053 https://blog.csdn.net/fdqw_sph/article ...
- (轉)EasyUI - DataGrid 去右边空白滚动条列
熟悉 EasyUI - DataGrid 的童鞋应该会注意到这样一个情景: 想去掉这块,找了下资料,发现也有人同样纠结:http://www.cnblogs.com/hantianwei/p/3440 ...
- 安装composer,以及通过composer安装laravel
1安装composer http://docs.phpcomposer.com/00-intro.html#Installation-Windows中选择windows安装 下载并且运行 Compos ...
- 判断and ,or
and 和 or 是条件 与和或,记住一条,and 是两边同时都满足,or 是只有满足一个条件就成立. # print(1 or False) #条件1成立,条件2不成立.打印条件1 #返回: 1# ...
- BZOJ 2733 [HNOI2012]永无乡 - 启发式合并主席树
Description 1: 查询一个集合内的K大值 2: 合并两个集合 Solution 启发式合并主席树板子 Code #include<cstdio> #include<cst ...