桥接模式(完全理解此模式)

GOF取的名字,有时候名字比模式本身更难懂。 有的如模板模式,都不用看代码,就知道这个模式是做什么的。

而这个bridge,。。看名字,无法知道它想做什么。 无语。看了几次,没看懂。今天看懂了,发现以前用过很多次了。

一句话就是 虚类的虚方法里面又调用了接口的方法,用接口的多态和虚函数的多态来组合多个需要变化的部分,来完成一些特定的场景。

其实这个不是固定的。个人感觉完全可以一个虚函数,合并n个接口。或者 多个虚函数组合多个接口。或者直接多个虚函数不需要接口也可以完成桥接的目的。

反正目的就是把变化点都独立变化。之后再组合。这样可以组合成很多不同的对象。

 

 

自己的例子,是一个不举模式。但是我确实是用它来实现一个打印信息的模板。 它就是一个自由模板啊。

个人总结。非常常用实用。

package com.linson.android.hiandroid2.DesignPattern;


import com.linson.LSLibrary.AndroidHelper.LSComponentsHelper;


//一直以为不举模式,是模板模式。因为最初不举模式和模板模式都没看懂。干脆就没去看。
//道可道,非常道,名可名,非常名。一个名字称呼而已。实在区分不了。先把握开闭的基本原则就好。后面慢慢体会。
//做一个debug信息的输出模板
public class Bridge
{
    public void run()
    {
        //2中变化。可以组合成为4种。 这个还不是重点。重点是变化的东西(接口),是在另一个变化当中(虚类).
        //如果有5个变化点。那么就有2×2×2×2×2种变化。不过有多少变化不是目的。而是说,如果有这种需求。那么不举模式bridge适合你。

        //来一个最普通的,头部简单的的debug信息.
        //注意:normal就说明了它普通。而又传入了SimpleHeader
        Pringlog_normal pringlog_normal=new Pringlog_normal(new SimpleHeader());
        String msg1=pringlog_normal.getLog("overtime");

        //来一个最普通的,头部信息稍微详尽的的debug信息.
        //注意:normal就说明了它普通。而又传入了SimpleHeader
        Pringlog_normal pringlog_normal1=new Pringlog_normal(new DetailHeader());
        String msg2=pringlog_normal1.getLog("overtime");

        //来一个警告版本,头部信息稍微详尽的的debug信息.
        //注意:normal就说明了它普通。而又传入了SimpleHeader
        Pringlog_error pringlog_error=new Pringlog_error(new DetailHeader());
        String msg3=pringlog_error.getLog("overtime");

        LSComponentsHelper.LS_Log.Log_INFO(msg1+"\r\n"+msg2+"\r\n"+msg3);
    }

    public interface IDebugMsgHead
    {
        public String PrintHead();
    }

    public class SimpleHeader implements IDebugMsgHead
    {
        @Override
        public String PrintHead()
        {
            return "1982:";
        }
    }

    public class DetailHeader implements IDebugMsgHead
    {
        @Override
        public String PrintHead()
        {
            return "1982 01 01;line: 25";
        }
    }


    public abstract class PringLog
    {
        public IDebugMsgHead mDebugMsgHead;
        public String getLog(String msgbody)
        {
            return mDebugMsgHead.PrintHead()+msgbody;
        }
    }

    public class Pringlog_normal extends PringLog
    {
        public Pringlog_normal(IDebugMsgHead msgHead)
        {
            mDebugMsgHead=msgHead;
        }

        @Override
        public String getLog(String msgbody)
        {
            return mDebugMsgHead.PrintHead()+". it it a msg body:"+msgbody;
        }
    }

    public class Pringlog_error extends PringLog
    {
        public Pringlog_error(IDebugMsgHead msgHead)
        {
            mDebugMsgHead=msgHead;
        }

        @Override
        public String getLog(String msgbody)
        {
            return "!!!!!!!!!!"+mDebugMsgHead.PrintHead()+msgbody;
        }
    }
}

 

posted @ 2019-07-04 15:57  琴鸟  阅读(269)  评论(0编辑  收藏  举报