zoukankan      html  css  js  c++  java
  • 桥接模式(完全理解此模式)

    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+"
    "+msg2+"
    "+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;
            }
        }
    }
  • 相关阅读:
    win7无法访问2003共享的解决方法(转)
    nokia vcf文件导入iphone(转)
    zblog之密码修改
    vs2010 dump 调试
    T400 CTO 突遇windows update当前无法检查更新,因为服务为运行。您可能需要重新启动计算机!
    练手卦,奖金何时发?
    QUdpSocket 4.6 严重丢包
    修行
    占问事宜:我买的择日书籍何时能到?
    Silverlight 5 Beta新特性[6]低延迟对WAV格式声音效果支持
  • 原文地址:https://www.cnblogs.com/lsfv/p/11132954.html
Copyright © 2011-2022 走看看