zoukankan      html  css  js  c++  java
  • 桥接模式(Bridge、Implementor)(具体不同平台日志记录,抽象与实现分离)

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

              假如我们需要建立一个日志记录器,可以实现数据库记录和文本记录。根据我们的经验我们应该将日志记录抽象化,在分别用数据库记录和文本记录来实现具体的功能。

              后来我们需要将他分别应用到net平台和java平台,考虑到不同平台的记录不同我们分别将数据库记录细化为net平台上的数据库机记录和java平台上的数据库记录。以及不同的文本记录。

             在后来我们打算添加xml平台以及更多的平台进去。

              现在发现我们的设计变得庞大脆弱,即便平台不同但总有相似之处,这其中的冗余代码会有很多。

              假如我们不止沿着平台这一方向扩展呢。

             因此我们需要使用桥接模式进行更加合理的设计。

    桥接模式将抽象部分与他的实现部分分离,使他们都可以独立的变化。

    抽象化:多个实体中共同的概念性联系。如:日志记录

    实现化:抽象化的具体实现。如:在Net平台上进行数据库日志记录。

    我们可以进行如下设计:

    桥接类:

    抽象日志

     1 public  abstract class log {
     2 private ImpLog impLog;
     3 
     4 public log(ImpLog impLog) {
     5     super();
     6     this.impLog = impLog;
     7 }
     8 
     9 abstract public void write(String log);
    10 
    11 public ImpLog getImpLog() {
    12     return impLog;
    13 }
    14 
    15 public void setImpLog(ImpLog impLog) {
    16     this.impLog = impLog;
    17 }
    18 }

    实现化角色:

    抽象平台

    1 public abstract class ImpLog {
    2     
    3 abstract public void execute(String msg);
    4 
    5 }

    具体实现化角色:

    java平台

    1 public class JImpLog extends ImpLog{
    2 
    3     @Override
    4     public void execute(String msg) {
    5          System.out.println("在java平台上," + msg);    
    6     }
    7 
    8 }

    net平台

    1 public class NImpLog extends ImpLog{
    2 
    3     @Override
    4     public void execute(String msg) {
    5         System.out.println("在Net平台上,"+msg);
    6         
    7     }
    8 
    9 }

    桥接具体类:

    数据库日志:

    public class DataBaseLog extends log{
    
        
        public DataBaseLog(ImpLog impLog) {
            super(impLog);
        }
    
        @Override
        public void write(String log) {
         getImpLog().execute("数据库日志:" + log);
        }
    
    }

    文本文件日志

     1 public class TextFileLog extends log{
     2 
     3     public TextFileLog(ImpLog impLog) {
     4         super(impLog);
     5     }
     6 
     7     @Override
     8     public void write(String log) {
     9     getImpLog().execute(log);    
    10     }
    11 
    12 }

    客户测试类:

     1 public class BridgePattern {
     2 
     3     public static void main(String[] args) {
     4      ImpLog  j= new JImpLog();//建立java平台
     5      log  jl = new DataBaseLog(j);//建立基于java 的数据库日志写入
     6      jl.write(" I am fine!"); //写入日志文件
     7 
     8 
     9     }
    10 
    11 }
  • 相关阅读:
    一文总结十大经典排序算法(思维导图 + 动图演示 + 代码实现 C/C++/Python + 致命吐槽)
    VulnHub——Kioptrix Level 2
    史上最全Redis面试题(2020最新版)
    js 根据秒数获取多少小时,多少分钟,多少秒
    RabbitMQ的死信队列
    女朋友也能看懂的多线程同步
    RabbitMQ的备份交换器
    BI Publisher(rtf)模板开发语法大全
    修改CUSTOM.PLL文件调用客户化FORM&修改标准FORM
    EBS客户化迁移SQL
  • 原文地址:https://www.cnblogs.com/the-wang/p/7281399.html
Copyright © 2011-2022 走看看