桥接模式(Bridge、Implementor)(具体不同平台日志记录,抽象与实现分离)
2024-10-08 00:21:43
桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。
假如我们需要建立一个日志记录器,可以实现数据库记录和文本记录。根据我们的经验我们应该将日志记录抽象化,在分别用数据库记录和文本记录来实现具体的功能。
后来我们需要将他分别应用到net平台和java平台,考虑到不同平台的记录不同我们分别将数据库记录细化为net平台上的数据库机记录和java平台上的数据库记录。以及不同的文本记录。
在后来我们打算添加xml平台以及更多的平台进去。
现在发现我们的设计变得庞大脆弱,即便平台不同但总有相似之处,这其中的冗余代码会有很多。
假如我们不止沿着平台这一方向扩展呢。
因此我们需要使用桥接模式进行更加合理的设计。
桥接模式将抽象部分与他的实现部分分离,使他们都可以独立的变化。
抽象化:多个实体中共同的概念性联系。如:日志记录
实现化:抽象化的具体实现。如:在Net平台上进行数据库日志记录。
我们可以进行如下设计:
桥接类:
抽象日志
public abstract class log {
private ImpLog impLog; public log(ImpLog impLog) {
super();
this.impLog = impLog;
} abstract public void write(String log); public ImpLog getImpLog() {
return impLog;
} public void setImpLog(ImpLog impLog) {
this.impLog = impLog;
}
}
实现化角色:
抽象平台
public abstract class ImpLog { abstract public void execute(String msg); }
具体实现化角色:
java平台
public class JImpLog extends ImpLog{ @Override
public void execute(String msg) {
System.out.println("在java平台上," + msg);
} }
net平台
public class NImpLog extends ImpLog{ @Override
public void execute(String msg) {
System.out.println("在Net平台上,"+msg); } }
桥接具体类:
数据库日志:
public class DataBaseLog extends log{ public DataBaseLog(ImpLog impLog) {
super(impLog);
} @Override
public void write(String log) {
getImpLog().execute("数据库日志:" + log);
} }
文本文件日志
public class TextFileLog extends log{ public TextFileLog(ImpLog impLog) {
super(impLog);
} @Override
public void write(String log) {
getImpLog().execute(log);
} }
客户测试类:
public class BridgePattern { public static void main(String[] args) {
ImpLog j= new JImpLog();//建立java平台
log jl = new DataBaseLog(j);//建立基于java 的数据库日志写入
jl.write(" I am fine!"); //写入日志文件 } }
最新文章
- 24章 创建TPL自定义模板(1)
- 弹性盒子之wap端布局
- Saying that Java is nice because it works on every OS is like saying that anal sex is nice because it works on every gender.
- Unable to execute dex: Multiple dex files define Lcom/kenai/jbosh/AbstractAttr
- MYSQL 删除字段值为NULL的语法
- 3天CSS总结
- React快速入门教程
- POJ1273 网络流-->最大流-->模板级别-->最大流常用算法总结
- WEB相关系列
- SpringMVC框架学习笔记(3)——controller配置汇总
- debian 9 双显卡安装NVIDIA显卡驱动
- 我在 B 站学机器学习(Machine Learning)- 吴恩达(Andrew Ng)【中英双语】
- __x__(6)0905第二天__标签属性=“值”
- java 大数据运算 BigInteger BigDecimal
- elasticsearch的索引操作和文档操作总结
- luogu2678 [NOIp2015]跳石头 (二分答案+贪心)
- linux常用命令大全2--挂载/dpkg/文件系统分析/apt/光盘/关机
- [LeetCode系列] 双单链表共同节点搜索问题
- Linux基础入门 第一章:Linux环境搭建——Redhat 6.4图文安装教程
- HDU - 2732 Leapin' Lizards (拆点最大流)
热门文章
- c++中变量、变量名、变量地址、指针、引用等含义
- day 64 Django基础十之Form和ModelForm组件
- day 53 Django基础二之URL路由系统
- 关于type return to continue,or q <;return>; to quit
- JS数组 组团(如何创建数组)var mychar = new Array( )
- CodeForces 258D Little Elephant and Broken Sorting(期望)
- Codeforces 388D Fox and Perfect Sets
- CSS所有选择器
- csps模拟67神炎皇,降雷皇,幻魔皇题解
- 常见的HTTP状态码详细解析