IOC介绍及其简单实现

​ 控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找。依赖注入应用比较广泛,这里只介绍依赖注入。

Read more...

Spring工厂模式

前言

工厂模式是一种在工程中广泛应用的设计模式,对代码的解耦合起到了很大的作用。实际上,我们可以将Spring理解成封装了我们工程中大量重复代码的一种工具。众所周知,Spring中最重要的组件就是IOC,而IOC中非常重要的部分就是应用了工厂模式的代码。而工厂模式依赖于Java的反射机制,所以,我们从反射机制讲起,一步步了解Spring的Bean工厂。
Read more...

MVC-MVP-MVVM

复杂的软件必须有清晰合理的架构,否则难以开发与维护。MVC(Model-View-Controller)是最常见的软件架构之一,广泛应用于业界。在MVC的基础上衍生出了MVP以及MVVM架构,这些名词均是为了解决图形界面应用程序复杂性管理问题而产生的应用架构模式。

本文分别对其相关特性做了简要分析,并从图形角度简析其间区别与联系。
Read more...

抽象类versus接口

抽象导言

抽象性和具体性都是相对的,不是绝对的。简单说,概念的内涵越小,则其抽象程度就越高,其外延也越大,反之亦然。比如“人”比“男人”抽象一点,而“生物”又比“人”更抽象一点,“物质”则比“生物”更抽象。

抽象的概念是由具体概念依其“共性”而产生的,把具体概念的诸多个性排出,集中描述其共性,就会产生一个抽象性的概念。抽象思维,是人类思维达到高级阶段产生的一种能力,例如,当小孩子思维尚未成熟时,他们只能掌握具体概念,他们在学习代词“你、我、他”时往往遇到困难,因为代词具有较高的抽象性。

总之,抽象概念的外延大,内涵小,具体概念的外延小,内涵大。
Read more...

关于ios::sync_with_stdio(false)和cin.tie(nullptr)

前言

我们可以发现C++高效率解决的源码中有很多以下代码段:

1
2
3
4
5
6
7
static const auto io_sync_off = []() {
// turn off sync
std::ios::sync_with_stdio(false);
// untie in/out streams
std::cin.tie(nullptr);
return nullptr;
}();

那么ios::sync_with_stdio(false);和cin.tie(nullptr);到底咋C++效率问题上起什么作用呢?这篇文章简要说明其起源与用法。
Read more...

前向星与链式前向星

前向星

前向星是以存储边的方式来存储图,先将边读入并存储在连续的数组中,然后按照边的起点进行排序,这样数组中起点相同的边就能够在数组中进行连续访问了。
其有点在于实现简单,易于理解。缺点是在读入边后需要对所有边进行一次排序,带来了时间开销,实用性也较差。因此只适合离线算法。

链式前向星(实质为数组模拟链表)

链式前向星和邻接表类似,也是链式结构的结合,每个节点i均有一个链表,此链表内的数据均为以节点i为起点的所有边的集合(对比邻接表存的是顶点的集合),边的表示为一个四元组(to,w,next),其中to代表该条边的有向点对(w,v),w代表边上的权值,next指向下一条边。
调用的时候只要通过head[i]就能访问到由节点i出发的第一条边的编号,通过编号到edge数组进行索引可以得到边的具体信息,然后根据这条边的next域可以得到第二条边的编号,以此类推,直到next域为INF(这里的INF即head数组初始化的值,一般取-1即可)

Read more...
  • Copyrights © 2019-2026 鞠桥丹-QIAODAN JU
  • 访问人数: | 浏览次数:

请我喝杯蓝莓汁吧~

支付宝
微信