精华内容
下载资源
问答
  • C++ 设计原则 依赖倒转原则 #include<iostream> using namespace std; /* 依赖倒转原则: 面向抽象编程,底层实现去实现抽象接口(中层),高层逻辑去使用抽象接口。 实现双向的抽象,面向抽象编程,改变...

    C++ 设计原则 依赖倒转原则

    #include<iostream>
    
    using namespace std;
    
    /*
    依赖倒转原则:
    面向抽象编程,底层实现去实现抽象接口(中层),高层逻辑去使用抽象接口。
    实现双向的抽象,面向抽象编程,改变以往的自上而下调用逻辑,明确实例之间的关系过重
    通过抽象类和多态实现
    */
    //中层抽象层
    class AbstractBankWork
    {
    public:
        virtual void DoWork()=0;
    };
    class SaveBankWork : public AbstractBankWork
    {
        public:
        virtual void DoWork()
        {
            cout << "Bank Save Work" <<endl;
        }
    };
    //底层实现层
    class PayBankWork : public AbstractBankWork
    {
        public:
        virtual void DoWork()
        {
            cout << "Bank Pay Work" <<endl;
        }
    };
    class TransferBankWork : public AbstractBankWork
    {
        public:
        virtual void DoWork()
        {
            cout << "Bank Transfer Work" <<endl;
        }
    };
    //高层业务层
    void DoBankWork(AbstractBankWork * work)
    {
        work->DoWork();
        delete work;
    }
    //用户使用层
    void test()
    {
        DoBankWork(new SaveBankWork());
        DoBankWork(new PayBankWork());
        DoBankWork(new TransferBankWork());
    }
    int main()
    {
        test();
        return 0;
    }
    
    
    展开全文
  • 双向最大匹配算法】从名字上来看(顾名思义),就是以最大匹配为原则、以双向的切分为方法进行汉子切分。本文所举得所有例子均是在词库足够完整的情况下进行的。 什么叫以最大匹配为原则? ...

    基于词库的双向最大匹配算法

    本文介绍了基于词库的双向最大匹配算法。该算法实现简单,分词效果依赖于词库。在词库相当的情况下,分词效果不错。某些情况下甚至强于基于隐马尔科夫模型的智能分词。

     

          【双向最大匹配算法】从名字上来看(顾名思义),就是以最大匹配为原则、以双向的切分为方法进行汉子切分。本文所举得所有例子均是在词库足够完整的情况下进行的。

     

    什么叫以最大匹配为原则?

           最大匹配原则就是在词库中找到最长匹配字符串作为一个单词。如“我出生在中华人民共和国”,以最大匹配原则进行分词则分词结果为“我”、“出生”、“在”、“中华人民共和国”,而不是“我”、“出生”、“在”、“中华”、“人民”、“共和国”。

     

    什么是双向切分?

           要说双向切分算法就不得不说下正向切分算法以及逆向切分算法。

     

           先说正向切分算法。正向切分算法其实就是按照人得自然阅读顺序对一句话进行词库切分。即从前往后进行词匹配。如“中国的首都是北京”这句话,可以如下步骤进行切分:

           1:取出词库中以“中”开头的词;

           2:取出词库中以“中国”开头的词;

           3:取出词库中以“中国的”开头的词;

           4:第三步取词为空,所以分出词“中国”。

           5:对接下来的字符串重复1-5步骤,直到字符串扫描完毕。

     

           分词完毕之后结果为:“中国”、“的”、“首都”、“是”、“北京”。

           为简化理解难度我采用了”以**为开头的词“这样的说法,但是在代码中实现时这样的方式运算量较大,速度较慢,为提高取词效率,建议采用多叉树结构,进行词库的存储,下同。

     

           正向切分的缺点是什么?其实只要看对下面这句话的切分就知道了。

           “我出生在河北省会”

           按照正向切分且以最大匹配为原则进行切分,结果为:“我”、“出生”、“在”、“河北省”、“会”。这显然是不对的。其实在汉语中这样的例子有很多,如:“在野生动物园”(在野、生动、物、园)、“技术和服务”(技术、和服、务)等。所以有人提出了逆向切分算法。

     

           逆向切分算法在实现上来说完全就是正向切分算法那一套。只是词库是逆向词库,对于切分语句的切分顺序为从后往前切。还以“我出生在河北省会”为例,切分步骤如下:

           1:找出反向词库中以“会”为开头的词;

           2:找出反向词库以“会省”为开头的词;

           3:找出反向词库以“会省北”为开头的词;

           4:第三步取词为空,所以取词“会省”;

           5:对接下来的字符串重复1-5步骤,直到字符串扫描完毕。

     

           分完词之后的结果为“会省”、“北河”、“在”、“生出”、“我”。对结果以及词进行翻转,则结果为“我”、“出生”、“在”、“河北”、“省会”。

    可以看到逆向的分词结果较正向的分词结果更为准确。但是这个准确并非是分词算法上有了提高,仅仅是因为利用了汉语的习惯而已。既然使用了相同的算法,所以逆向切分的缺点跟正向的相同,如对“长春药店”就有可能分出“长”、“春药店”这样的词。

     

           因为正向切分以及逆向切分的缺点(其实就是一个缺点),人们提出了双向切分算法。双相切分算法就是使用正向切分一次、逆向切分一次。如果两次切分结果一样的话就好说了,随便选一个结果就可以。

    但是如果切分不一样的话使用那一次的切分结果呢?这就涉及到了结果的选取原则问题。老夫以为切分词应该遵守以下原则:

           1:最大匹配原则:上面一直在说这个,老夫认为使用这个原则的原因是词的字数越多,表示的含义越丰富、对于一条语句分出来的词也就越少,相对的,准确性也就会越高。

           2:词库中没有的单字词越少越好。这个原则有点依赖于词库了,至少词库中应该有一些常用的单字成词的字吧,比如:“你”、“我”、“他”、“和”、“的”、“了”等。使用这个原则的原因可以从上面提到的“技术和服务”这个例子看出来:

    正向结果:技术、和服、务

    逆向结果:技术、和、服务

           虽然分出来的结果单字词都是一个,但是,逆向的单字词”和“在词库中存在,所以我们选择返回逆向切分结果。

     

           虽然双向切分算法的分词准确度大大提高了,但是双向切分算法并不是一个智能算法,这是由算法的基因决定的。但是双向最大匹配算法确实可以解决大多数的中文分词问题(依赖于词库)。只要有一个差不多(实在不知道该怎么形容,只好使用差不多这个词了)的词库(这类的词库在网上很容易就能搞到手),使用如此简单的一个算法,却解决了一个如此复杂的问题,这本身也是一个非常美妙的事情。

     

           今就到这,关于智能分词算法,等忙过这段时间在整理吧。

    展开全文
  • 微服务拆分原则

    2021-01-15 17:22:32
    文章目录微服务拆分原则 微服务拆分原则 拆分的大原则是当一块业务不依赖或极少依赖其它服务,有独立的业务语义,为超过 2 个的其他服务或客户端提供...避免环形依赖与双向依赖:尽量不要做服务之间的循环依赖 ...


    微服务拆分原则

    拆分的大原则是当一块业务不依赖或极少依赖其它服务,有独立的业务语义,为超过 2 个的其他服务或客户端提供数据,那么它就应该被拆分成一个独立的服务模块
    
    1. 单一职责、高内聚低耦合:简单来说一张表划分为一个服务
    2. 服务粒度适中:服务不要太细(有的团队甚至一个接口一个服务)
    3. 以业务模型切入:比如产品,用户,订单为一个模型来切入
    4. 演进式拆分:刚开始不要划分太细,可以随着迭代过程来逐步优化
    5. 避免环形依赖与双向依赖:尽量不要做服务之间的循环依赖
    展开全文
  • 微服务拆分原则和方法

    万次阅读 2018-05-30 10:11:47
    1. 单一职责、高内聚低耦合2. 服务粒度适中3. 考虑团队结构4. 以业务模型切入5. 演进式拆分6. 避免环形依赖与双向依赖

    1. 单一职责、高内聚低耦合

    2. 服务粒度适中

    3. 考虑团队结构

    4. 以业务模型切入

    5. 演进式拆分

    6. 避免环形依赖与双向依赖

    展开全文
  • 拆分原则: 单一职责、服务粒度适中、考虑团队结构、以业务模型切入、演进式拆分、避免环形依赖和双向依赖拆分步骤: 分析业务模型、确定服务边界、模块拆分、数据库拆分...
  • UML1.1 类图1.1.1 属性1.1.2 方法1.2 类之间的关系1.2.1 关联(association)1.2.1.1 单向关联1.2.1.2 双向关联1.2.1.3 自关联1.2.1.4 多重性关联1.2.1.5 聚合(Aggregation)1.2.1.6 组合(Composition)1.2.2 依赖...
  • (一)高校思想政治教育目标应遵循社会进步和个人发展辩证统一的原则 “思想政治教育在各级各类学校都要摆在重要位置,任何时候都不能放松和削弱。思想政治素质是最重要的素质。不断增强学生和群众的爱国主义、集体...
  • UML(大象 Thinking in uml 学习笔记)--核心元素

    千次阅读 热门讨论 2019-03-30 10:01:49
    之前的文章: 参与者与业务工人与涉众 用例 ...原则: ...包的理想状态的修改ABC包中的一个包,另外的包不受到影响,...包之间的依赖关系应是单向的,避免双向依赖和循环依赖 双向依赖: A依赖于B,B依赖于A...
  • 从java的类装载器看安全

    千次阅读 2010-02-09 20:44:00
    jave是安全的,这体现在多个方面,其中之一就是java类的加载,而且java类的加载安全机制体现出来的是一种原则,就是保持信息的单向流动而不是 杂糅的双向依赖总是一件好事,因为首先这样做会更加安全,其次这样做会...
  • 微服务拆分

    2018-10-25 15:18:53
    拆分原则:  单一职责、服务粒度适中、考虑团队结构、以业务模型切入、演进式拆分、避免环形依赖和双向依赖 拆分步骤:  分析业务模型、确定服务边界、模块拆分、数据库拆分    ...
  • UML核心元素之包

    2012-08-06 15:50:00
    1、概念:容纳并为其他元素分类。 2、分包原则: ...包之间依赖关系应该是单向的,应当尽量避免双向依赖和循环依赖。 3.包的版型。 A.领域包:用于分类业务领域内的业务单元,每个...
  • 租房项目 启动前的处理

    千次阅读 2020-08-24 21:46:29
    6、避免环形依赖和双向依赖 如果还没有安装 beego 的话先安装 beego $ go get -u -v github.com/astaxie/beego $ go get -u -v github.com/beego/bee $ cd $GOPATH/src/github.com/beego/bee $ go build $ sudo mv ...
  • 原则: 各司其职 权责分明 从组织角度看: 预防一个团队 权利膨胀 团队势力扩大到整个组织 从团队角度看: ...合作得越多,就意味着依赖越多:二者可能存在强耦合关系,甚至是糟糕的双向依赖...
  • 在使用了分层设计的系统中...Separated Interface模式将上层和下层之间的双向依赖转变成上下两层对一个窄接口的单向依赖。 在Separated Interface模式背后,隐藏着一个十分重要的设计原则,它非常著名,却因高深莫测...
  • Java设计所遵循的准则

    2019-03-30 19:24:22
    依赖总是单向的,关联可以是双向的,依赖的一方的属性不为被依赖的类。 2 抽象类设计原则 一个设计者应力图遵循这些原则 具体类不是用来继承的 抽象类应该有尽可能多的共同代码 抽象类应该...
  • 其它中间件

    2021-04-22 20:57:57
    微服务 微服务拆分 服务拆分策略 创建微服务架构的策略之一就是采用业务能力...5.、避免环形依赖与双向依赖:尽量不要做服务之间的循环依赖改,需要调整的类应该都在这个包之内。 补充几点实践的: 1、服务分层,将
  • JSON转换器--接口设计

    千次阅读 2010-01-11 23:47:00
    接口设计8.3.1 设计原则JSON转换器组件,命名为JsonConverter,由于其应用场景就是进行JSON文本串与Java对象之间的双向转换,没有任何对环境、上下文的依赖;转换是一次性的动作,也没有需要使用IOC容器对自己或...
  • vue面试题汇总

    2021-01-03 12:35:29
    但是由于各种数据相互依赖相互绑定,导致数据问题的源头难以被跟踪到,子组件修改父组件,兄弟组件互相修改有有违设计原则。 4.双向数据绑定实现原理 vue2.0利用Object.defineProperty,采用数据劫持结合发
  • 文章在对这种多主体双维度交往实践理论所蕴含的"生态依赖原则"和"双向生态维度"进行理论澄清的同时,反驳了部分环境主义者对"马克思理论缺乏生态关怀"这一观点的质疑,并且,这一理论所蕴藏的生态内涵亦可以成为我国可...
  • Hibernate关联关系映射

    2012-04-08 13:14:13
    关联关系映射的分类可以遵行这样一个原则双向还是单项、是否有链接表, 依赖主键还是外键。  关联关系映射通常情况是最难配置正确的。在这个部分中,我们从单向关系映射开始,然后考虑双向关系映射,由浅至深...
  • AngularJS-4

    2018-02-03 09:18:03
    双向数据绑定(view和model) ③依赖注入 ④模块化设计 一、如何自定义模块并进行调用?? 自定义模块:angular.module() 模块之间如何相互之间的调用: angular.module('myApp02',['ng','myApp01'])...
  • angular04

    2017-06-19 08:30:22
    ng四大特征:①采用了MVC的设计模式②双向数据绑定(view和model)③依赖注入④模块化设计一、如何自定义模块并进行调用??自定义模块:angular.module()模块之间如何相互之间的调用: angular.module('myApp02',['...
  • 《UML建模实例教程》【PPT】

    千次下载 热门讨论 2012-11-14 22:36:16
    .2.3.1处理复杂问题的原则 2.3.200A方法的基本步骤 2.4面向对象设计 2.5面向对象实现 2.6面向对象方法的内涵 2.7软件建模概述 2.7.1软件建模的概念 2.7.2软件建模的用途 2.7.3软件建模的优点 习题 第3章...

空空如也

空空如也

1 2 3
收藏数 55
精华内容 22
关键字:

双向依赖原则