【JAVA设计模式】之桥接模式(BridgePattern)

桥接模式的作用是将两样东西连接起来,比如桥梁把河的两岸连接起来

桥接模式把“类的功能层次结构”和“类的实现层次结构”连接起来

类的层次结构

  • 类的功能层次:父类通过定义抽象方法来定义接口API
  • 类的实现层次:子类通过实现具体方法来实现接口API

示例程序

相关类一览表

类的层次 类名 描述
功能层 Express 快递寄件
功能层 EnhanceExpress (寄件)增加代收功能
实现层 ICompany 快递公司
实现层 SunFengImpl 顺丰快递
 

BridgeTest

测试类

 

 

 

 

 

 

 

示例程序类图

【JAVA设计模式】之桥接模式(BridgePattern)_第1张图片

 

public class Express {
    private ICompany iCompany;

    public Express(ICompany iCompany) {
        this.iCompany = iCompany;
    }

    public void send() {
        iCompany.send();
    }
}
public class EnhanceExpress extends Express {
    public EnhanceExpress(ICompany iCompany) {
        super(iCompany);
    }

    public void recive() {
        System.out.println("快递人员已收件,准备发件中。。。");
        send();
    }
}
public interface ICompany {

    void send();
}

 

public class SunFengImpl implements ICompany{
    @Override
    public void send() {
        System.out.println("顺丰物流,快件已发出。。。");
    }
}
public class BridgeTest {

    public static void main(String[] args) {
        Express express = new Express(new SunFengImpl());
        EnhanceExpress enhance= new EnhanceExpress(new SunFengImpl());
        express.send();
        enhance.send();
    }
}

执行结果:

顺丰物流,快件已发出。。。
快递人员已收件,准备发件中。。。
顺丰物流,快件已发出。。。

Bridge模式使用场景

  • Abstraction(抽象化)

定义功能最上层角色Abstraction,它使用了Implementor角色的方法定义了基本功能,并保存了Implementor的实例,示例:Express

  • RefinedAbstraction(增强抽象化)

在原来Abstraction的基础上增加新功能,示例:EnhanceExpress

  • Implementor(实现者)

该角色处在“实现层”最上层,定义了具体的行为规则,示例:ICompany

  • ConcreteImplementor(具体的实现者)

它实现了Implementor定义的方法,示例:SunFengImpl

 

日常使用

桥接模式在我们web开发中也是使用最频繁的模式之一,在Controller层我们会定义各种业务处理,比如登录操作,定义UserService接口的 login() 的抽象方法,子类UserServiceImpl实现UserService的login()方法处理具体的登录操作,在Controller类中只需保存UserService对象实例。此时UserService即可认为是“桥梁”作用,连接了Controller的抽象定于与UserServiceImpl的具体实现;对UserService新增、修改的实现都不影响Controller类,以做到解耦

你可能感兴趣的:(JAVA设计模式)