Java设计模式之桥接模式
1.桥接模式概述
1.1 桥接模式定义
桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。
1.2 使用场景
桥接就是一个对象不同维度的组合,比如女士的皮包,按颜色可以分为红橙黄绿青蓝紫,按用途可以分为钱包,购物包,电脑包,按背的方式可以斜背,后背,前背。
两种实现方式,一是所有组合方式建一个类,第二种是按照不同维度组合,也就是桥接模式。
2. 桥接模式实现
/**
* 日志级别
*
* @author 20023262
* @date 2020/12/11
* @since 1.0
*/
public interface LoggerLevel {
/**
* 设置类型
*/
void write(String logType);
}
/**
* warn日志级别
*
* @author 20023262
* @date 2020/12/11
* @since 1.0
*/
public class LoggerLevelWarnImpl implements LoggerLevel {
@Override
public void write(String logType) {
System.out.println("【warn】" + logType);
}
}
/**
* error日志级别
*
* @author 20023262
* @date 2020/12/11
* @since 1.0
*/
public class LoggerLevelErrorImpl implements LoggerLevel {
@Override
public void write(String logType) {
System.out.println("【error】" + logType);
}
}
/**
* info日志级别
*
* @author 20023262
* @date 2020/12/11
* @since 1.0
*/
public class LoggerLevelInfoImpl implements LoggerLevel {
@Override
public void write(String logType) {
System.out.println("【info】" + logType);
}
}
/**
* 日志业务类型
*
* @author 20023262
* @date 2020/12/11
* @since 1.0
*/
public abstract class Logger {
public LoggerLevel loggerLevel;
public void setLoggerLevel(LoggerLevel loggerLevel) {
this.loggerLevel = loggerLevel;
}
public abstract void print();
}
/**
* 操作日志类型
*
* @author 20023262
* @date 2020/12/11
* @since 1.0
*/
public class LoggerOperator extends Logger {
@Override
public void print() {
loggerLevel.write("操作日志");
}
}
/**
* 交易日志类型
*
* @author 20023262
* @date 2020/12/11
* @since 1.0
*/
public class LoggerTransaction extends Logger {
@Override
public void print() {
loggerLevel.write("交易日志");
}
}
/**
* 桥接模式测试类
* 桥接要做的就是一个对象不同维度的组合
*
*
* @author 20023262
* @date 2020/12/11
* @since 1.0
*/
public class BridgeTest {
@Test
public void bridgeTest() {
//警告日志
LoggerLevel loggerLevelWarn = new LoggerLevelWarnImpl();
//操作日志
Logger loggerOperator = new LoggerOperator();
//警告的操作日志
loggerOperator.setLoggerLevel(loggerLevelWarn);
loggerOperator.print();
//错误日志
LoggerLevel loggerLevelError = new LoggerLevelErrorImpl();
//交易日志
Logger loggerTransaction = new LoggerTransaction();
//错误的交易日志
loggerTransaction.setLoggerLevel(loggerLevelError);
loggerTransaction.print();
}
}