本篇文章给大家带来了关于java的相关知识,其中主要介绍了桥接模式的相关问题,桥接模式将抽象与实现分离,使它们可以独立变化,降低了抽象和实现这两个可变维度的耦合度,下面一起来看一下,希望对大家有帮助。

推荐学习:《java视频教程》
其实在现实生活中,有很多类可以有两个或多个维度的变化,如图形既可按形状分,又可按颜色分,如果用继承方式,m 种形状和 n 种颜色的图形就有 m*n 种,不但对应的子类很多,而且扩展比较困难。
比如不同颜色和字体的文字、不同品牌和功率的汽车、不同性别和职业的男女、支持不同平台和不同文件格式的媒体播放器等。如果用桥接模式就能很好地解决这些问题。
立即学习“Java免费学习笔记(深入)”;
将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度
模式类型:结构设计模式
原理类图:
原理类图说明:
优点:
缺点:
桥接(Bridge)模式包含以下主要角色:
结构图:

该结构图的实现代码:
实视化角色:
/**
* 实视化角色
*/public interface Implemntor {
public void OperationImpl();}具体实现化角色:
/**
* 具体实现化角色
*/public class ConcreteImplementorA implements Implemntor{
@Override
public void OperationImpl() {
System.out.println("具体实现化角色被访问");
}}抽象化角色:
/**
* 抽象化角色
*/public abstract class Abstraction {
protected Implemntor implemntor;
protected Abstraction(Implemntor implemntor){
this.implemntor = implemntor;
}
public abstract void Operation();}扩展抽象化角色:
基于jsp+javabean+access(mysql)三层结构的动态购物网站,v1.2包含v1.0中未公开的数据库连接 的java源文件 一,网站前台功能: 产品二级分类展示:一级分类--二级分类--产品列表--详细介绍(名称,图片,市场价,会员价,是否推荐,功能介绍等) 产品搜索:关键字模糊搜索 定购产品:选择商品--确认定购--填写收货人信息--选择付款方式--订单号自动生成(限登录用户)
0
/**
* 扩展抽象化角色
*/public class RefinedAbstraction extends Abstraction{
protected RefinedAbstraction(Implemntor implemntor) {
super(implemntor);
}
public void Operation(){
System.out.println("扩展抽象化角色被访问");
implemntor.OperationImpl();
}}测试类:
public class Test {
public static void main(String[] args) {
Implemntor implemntor = new ConcreteImplementorA();
Abstraction abs = new RefinedAbstraction(implemntor);
abs.Operation();
}}输出:
扩展抽象化角色被访问 具体实现化角色被访问
将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变
交通工具在路上行驶,这里有两个维度的变化,交通工具的类型不同,路也分水泥路和柏油路
类图:
交通工具类:
/**
* 交通工具类
*/public interface Vehicle {
public void drive();}具体的交通工具:小汽车
/**
* 具体的交通工具:小汽车
*/public class Car implements Vehicle{
@Override
public void drive() {
System.out.println("小汽车");
}}具体的交通工具:大巴车
/**
* 具体的交通工具:大巴车
*/public class Bus implements Vehicle{
@Override
public void drive() {
System.out.println("大巴车");
}}抽象的路:
/**
* 抽象的路
*/public abstract class Road {
protected Vehicle vehicle;
public Road(Vehicle vehicle){
this.vehicle = vehicle;
}
public abstract void driveOnRoad();}具体的路:油柏路
/**
* 具体的路:油柏路
*/public class UnpavedRoad extends Road{
public UnpavedRoad(Vehicle vehicle) {
super(vehicle);
}
@Override
public void driveOnRoad() {
super.vehicle.drive();
System.out.println("行驶在油柏路");
}}具体的路:水泥路
/**
* 具体的路:水泥路
*/public class CementRoad extends Road{
public CementRoad(Vehicle vehicle) {
super(vehicle);
}
@Override
public void driveOnRoad() {
super.vehicle.drive();
System.out.println("行驶在水泥路");
}}测试类:
//测试public class Test {
public static void main(String[] args) {
Road roadCar = new CementRoad(new Car());
roadCar.driveOnRoad();
Road roadBus = new CementRoad(new Bus());
roadBus.driveOnRoad();
}}输出:
小汽车 行驶在水泥路 大巴车 行驶在水泥路
对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用.
推荐学习:《java视频教程》
以上就是详细介绍Java桥接模式的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号