【玩转23种Java设计模式】结构型模式篇:桥接模式

2022-05-12 10:51:00 浏览数 (1)

软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

汇总目录链接:【玩转23种Java设计模式】学习目录汇总整理

文章目录
  • 一、简介
  • 二、实例
    • 1、手机品牌抽象类(AbstractBrand)
    • 2、手机软件抽象类(AbstractSoftware)
    • 3、华为手机(HuaWeiPhone)
    • 4、游戏中心软件(GameCenter)
    • 5、测试类
  • 三、总结
    • 1、优点
    • 2、缺点
    • 3、应用场景

一、简介

  桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(interface)模式。

  桥梁模式所涉及的角色有:

  • 抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。
  • 修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
  • 实现化(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层的操作。
  • 具体实现化(Concrete Implementor)角色:这个角色给出实现化角色接口的具体实现。

二、实例

1、手机品牌抽象类(AbstractBrand)

代码语言:javascript复制
public abstract class AbstractBrand {
    protected AbstractSoftware abstractSoftware;

    // 设置手机软件
    public void setSoftware(AbstractSoftware abstractSoftware) {
        this.abstractSoftware = abstractSoftware;
    }

    // 运行
    public abstract void run();
}

2、手机软件抽象类(AbstractSoftware)

代码语言:javascript复制
public abstract class AbstractSoftware {
    public abstract void run();
}

3、华为手机(HuaWeiPhone)

代码语言:javascript复制
public class HuaWeiPhone extends AbstractBrand {
    @Override
    public void run() {
    	System.out.println("华为手机");
        abstractSoftware.run();
    }
}

4、游戏中心软件(GameCenter)

代码语言:javascript复制
public class GameCenter extends AbstractSoftware {
    @Override
    public void run() {
        System.out.println("运行游戏中心");
    }
}

5、测试类

代码语言:javascript复制
public class Main {
    public static void main(String[] args) {
        AbstractBrand abstractBrand = new HuaWeiPhone();
        abstractBrand.setSoftware(new GameCenter());
        abstractBrand.run();
    }
}

控制台输出:

代码语言:javascript复制
华为手机
运行游戏中心

三、总结

1、优点

  • 抽象和实现分离。桥梁模式完全是为了解决继承的缺点而提出的设计模式。
  • 优秀的扩展能力。
  • 实现细节对客户透明。客户不用关心细节的实现,它已经由抽象层通过聚合关系完成了封装。

2、缺点

  • 会增加系统的理解与设计难度。由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

3、应用场景

  • 不希望或不适用使用继承的场景。
  • 接口或抽象类不稳定的场景。
  • 重用性要求较高的场景。

0 人点赞