首页 >

详细介绍Java桥接模式

Java|java教程详细介绍Java桥接模式
java
Java-java教程
笑话大全网站织梦源码下载,vscode窗口已崩溃,ubuntu文件框架,apr配置tomcat,sqlite添加密码 c,必须知道的11个微前端框架,爬虫做设计真的假的,php代码的优化,seo外贸营销策略,维修网站源码,网页设计分类菜单代码,网店广告模板lzw
《java视频教学》
微信php源码下载,vscode断点表达式,ubuntu缓存包,怎么安装tomcat下载,scrapy爬虫原理,php 服务器端开发,宁夏优质seo优化加盟企业,易语言asp网站助手加解密工具,淘宝客 织梦模板lzw
其实在现实生活中,有很多类可以有两个或多个维度的变化,如图形既可按形状分,又可按颜色分,如果用继承方式,m 种形状和 n 种颜色的图形就有 m*n 种,不但对应的子类很多,而且扩展比较困难。
快递空包网站源码,vscode怎么玩游戏,ubuntu安多大,tomcat 网页不刷新,爬虫制作API,网页截图实现PHP,湘潭360seo优化价位,响应式的艺考培训网站织梦模板,cms会员收费模板lzw
比如不同颜色和字体的文字、不同品牌和功率的汽车、不同性别和职业的男女、支持不同平台和不同文件格式的媒体播放器等。如果用桥接模式就能很好地解决这些问题。


1、桥接模式的定义

将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度

模式类型:结构设计模式

原理类图:
详细介绍Java桥接模式
原理类图说明:

Client类: 桥接模式的调用者抽象类(Abstraction) : 维护了Implementor/即它的实现类ConcretelmplementorA…二者是器合关系,Abstraction充当桥接英RehinedAbstraction: 是Abstraction抽象类的子类lmplementor:行为实现类的接口ConcretelmplementorA/B: 行为的具体实现类从UML图: 这里的抽象类和接口是聚合的关系,其实调用和被调用关系


2、桥接模式的优缺点

优点:

抽象与实现分离,扩展能力强符合开闭原则符合合成复用原则其实现细节对客户透明

缺点:

由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的理解与设计难度


3、桥接模式的结构

桥接(Bridge)模式包含以下主要角色:

抽象化(Abstraction)角色: 定义抽象类,并包含一个对实现化对象的引用扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现

结构图:

详细介绍Java桥接模式
该结构图的实现代码:

实视化角色:

/** * 实视化角色 */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();}

扩展抽象化角色:

/** * 扩展抽象化角色 */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();    }}

输出:

扩展抽象化角色被访问具体实现化角色被访问

4 、桥接模式的案例实现

将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变

交通工具在路上行驶,这里有两个维度的变化,交通工具的类型不同路也分水泥路和柏油路

类图:
详细介绍Java桥接模式

交通工具类:

/** * 交通工具类 */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();    }}

输出:

小汽车行驶在水泥路大巴车行驶在水泥路

5、桥接模式的注意事项实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,这有助于系统进行分层设计,从而产生更好的结构化系统对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了,其它的部分由具体业务来完成桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性,即需要有这样的应用场景


6、桥接模式应用场景

对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用.

《java视频教学》


  • 暂无相关文章
  • Posted in 未分类