• 注入式开发


    不是嵌入式开发!也不是依赖注入!这个词是我杜撰的,如有雷同,纯属扯蛋。

    什么是 ”注入式开发“?

    就是我们要调用一个类的现成方法的时候,在这个方法中写入一些自己的代码,寄生在这个方法里面,随同这个方法一起运行。甚至乎,我们写的代码喧宾夺主,完全取代了原有的代码。此谓注入。就好像《黑客帝国》里的机器人,用一只手指点在人类身上,说:咪咪咪(me、me、me),结果那个人就变成了他。传说,螟蛉这种虫没有生育能力,只好偷其他昆虫的蛋,放到自己窝里,然后整天对着蛋祷告:似我、似我,结果蛋孵化出来,真的就变成了螟蛉。我每次在进行注入式开发的时候,就想到这些故事。

    那么怎么注入呢?

    多态是面向对象的三大特性之一,实现方式就是虚函数。父类定义虚函数,然后子类各自实现之。运行的时候,不同的子类,虽然应用了同一个虚函数,但运行结果迥异,这就是多态。

    但是,我们在调用方法的时候,难道下下都要继承一个类,然后重写其虚函数吗?未免太繁琐。

    这时可以用委托。

    就是在类里面定义、声明一个委托,在类的方法里面检查、运行这个委托,在调用代码里实现这个委托。

    有代码有j8:
    类代码:

        public class StaticChart
        {
        //定义、声明委托
            public delegate string DlgSetHtml(Dictionary<string, string> dict, string title, string summary);
            public DlgSetHtml dlgSetHtml { get; set; }
    
            public virtual string GetChartHtml(Dictionary<string, string> dict
                , string title
                , string summary)
            {
            //如果委托存在,则执行委托,并且返回。下面那些一大坨的代码就被架空了。该方法已被注入,附体
                if (dlgSetHtml != null) return dlgSetHtml(dict, title, summary);
    
    //这里是一大坨默认代码
                return "这是一段默认话";
            }
    

    调用代码

    StaticChart chart = new StaticChart();
    //实现委托
    chart.dlgSetHtml = (dictT, title, summary) =>
                {
                    StringBuilder sb = new StringBuilder("");
    
                    sb.Append("前天在高速上,临近某个出口,有个混蛋在我这条车道上停!住!了!老子时速80公里冲过去,赶紧踩刹车减速,瞄了一下右边的车道,后面有辆车,好像还比较紧,顾不上了,稍稍变了一下道,与那鸟人擦身而过!我*你M的,世上还真有这种害人害己的傻逼!");
    
                    return sb.ToString();
                };
    string re = chart.GetChartHtml(dict,"标题","小结");
    //执行之后,re = "前天在高速上。。。。"我这段牢骚话,而不是返回默认设定的话;

    总结:这种类内声明、调用委托,类外实现委托的方式,调用方可以对类方法的运行施加影响,从而实现调用方个性化的效果,或者说,实现了多态。这种多态,不是通过重写虚函数的方式,而是通过实现类的委托。委托就好像尖刀一样插入了类的胸膛,又好像卧底一样潜藏在类的深处。通过委托,我们可以像黑客帝国的机器人,手指点在那个类上,说:咪咪咪。。。

    版权声明:本文为博主原屙文章,喜欢你就担走。

  • 相关阅读:
    6种基本排序(C++实现)
    关于 ^ 异或 及 无中间变量进行交换
    清理C盘旧驱动
    sqlmap基本使用
    http头部注入
    waf绕过注入
    mysql报错注入
    Burp Suite工具使用
    mysql注入
    Linux网络配置
  • 原文地址:https://www.cnblogs.com/leftfist/p/4764225.html
Copyright © 2020-2023  润新知