自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

时光隧道

QQ:2528877987,微信:13960699696

原创 (精华)2020年8月31日 计算机操作系统 IO概念和五种IO模型

一、什么是IO? 我们都知道unix世界里、一切皆文件、而文件是什么呢?文件就是一串二进制流而已、不管socket、还是FIFO、管道、终端、对我们来说、一切都是文件、一切都是流、在信息交换的过程中、我们都是对这些流进行数据的收发操作、简称为I/O操作(input and output)、往流中读...

2020-08-31 16:18:53 209715 0

原创 (精华)2020年8月31日 .NET 内存溢出

内存溢出的几种情况 一:事件驱动 原因事件对象没有被释放,或者一直引用着 class TestClassHasEvent { public delegate void TestEventHandler(object sender, EventArgs e); ...

2020-08-31 00:02:58 214376 0

原创 (精华)2020年8月30日 通用职责分配原则(二)-创造者原则(Creator Principle)

创造者原则(Creator Principle) (1)问题 谁应该负责产生类的实例? (2)方案 如果符合下面的一个或者多个条件,则可将创建类A实例的职责分配给类B: B包含A; B聚合A; B拥有初始化A的数据并在创建类A的实例时将数据传递给类A; B记录A的实例; B频繁使用A。 此时,我们...

2020-08-31 00:02:48 214379 0

原创 (精华)2020年8月30日 通用职责分配原则(九)-受保护变量原则(Protected Variations Principle)

受保护变量原则(Protected Variations Principle) (1)问题 如何分配职责给对象、子系统和系统,使得这些元素中的变化或不稳定的点不会对其他元素产生不利影响? (2)方案 找出预计有变化或不稳定的元素,为其创建稳定的“接口”而分配职责。 (3)分析 受保护变化模式简称P...

2020-08-31 00:02:38 214376 0

原创 (精华)2020年8月30日 通用职责分配原则(八)-中介原则(Indirection Principle)

中介原则(Indirection Principle) (1)问题 1、如何分配职责以避免两个(或多个)事物之间的直接耦合? 2、如何解耦对象以降低耦合度并提高系统的重用性? (2)方案 分配职责给中间对象以协调组件或服务之间的操作,使得它们不直接耦合。中间对象就是在其他组件之间建立的中介。 (3...

2020-08-31 00:02:27 214335 0

原创 (精华)2020年8月30日 通用职责分配原则(七)-纯虚构原则(Pure Fabrication Principle)

纯虚构原则(Pure Fabrication Principle) (1)问题 当不想破坏高内聚和低耦合的设计原则时,谁来负责处理这种情况? (2)方案 将一组高内聚的职责分配给一个虚构的或处理方便的“行为”类,它并不是问题域中的概念,而是虚构的事务,以达到支持高内聚、低耦合和重用的目的。 (3)...

2020-08-31 00:02:01 212977 0

原创 (精华)2020年8月30日 通用职责分配原则(六)-多态原则(Polymorphism Principle)

多态原则(Polymorphism Principle) (1)问题 1、如何处理基于类型的不同选择? 2、如何创建可嵌入的软件组件? (2)方案 当相关选择或行为随类型(类)变化而变化时,用多态操作为行为变化的类型分配职责。 (3)分析 由条件变化引发同一类型的不同行为是程序的一个基本主题。如果...

2020-08-31 00:01:45 214357 0

原创 (精华)2020年8月30日 通用职责分配原则(五)-控制器原则(Controller Principle)

控制器原则(Controller Principle) (1)问题 谁应该负责处理一个输入系统事件? (2)方案 把接收或者处理系统事件消息的职责分配给一个类。这个类可以代表: 整个系统、设备或者子系统; 系统事件发生时对应的用例场景,在相同的用例场景中使用相同的控制器来处理所有的系统事件。 (3...

2020-08-31 00:01:32 215233 0

原创 (精华)2020年8月30日 通用职责分配原则(四)-高内聚原则(High Cohesion Principle)

高内聚原则(High Cohesion Principle) (1)问题 怎样使得复杂性可管理? (2)方案 分配一个职责,使得保持高内聚。 (3)分析 内聚是评价一个元素的职责被关联和关注强弱的尺度。如果一个元素具有很多紧密相关的职责,而且只完成有限的功能,则这个元素就具有高内聚性。此处的元素可...

2020-08-31 00:01:18 214347 0

原创 (精华)2020年8月30日 通用职责分配原则(三)-低耦合原则(Low Coupling Principle)

低耦合原则(Low Coupling Principle) (1)问题 怎样支持低的依赖性,减少变更带来的影响,提高重用性? (2)方案 分配一个职责,使得保持低耦合度。 (3)分析 耦合是评价一个系统中各个元素之间连接或依赖强弱关系的尺度,具有低耦合的元素不过多依赖其他元素。此处的元素可以是类,...

2020-08-31 00:01:04 212825 0

原创 (精华)2020年8月30日 通用职责分配原则(一)-信息专家原则(Information Expert Principle)

信息专家原则(Information Expert Principle) (1)问题 给对象分配职责的通用原则是什么? (2)方案 将职责分配给拥有履行一个职责所必需信息的类,即信息专家。 (3)分析 信息专家原则是面向对象设计的最基本原则。通俗点来讲,就是一个类只做自己应该做的事。在系统设计时,...

2020-08-30 00:05:05 215297 0

原创 (精华)2020年8月30日 面向对象设计原则(七)-迪米特法则(Law of Demeter or LoD)

迪米特法则(Law of Demeter or LoD) 一个软件实体应当尽可能少的与其他实体发生相互作用。每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。 如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的...

2020-08-30 00:04:49 215299 0

原创 (精华)2020年8月30日 面向对象设计原则(六)-合成复用原则(Composite Reuse Principle or CRP)

合成复用原则(Composite Reuse Principle or CRP) 尽量使用对象组合,而不是继承来达到复用的目的。 合成复用原则是鼓励优先使用对象的组合,而不是使用继承。 示例 public abstract class BankCard { public string U...

2020-08-30 00:04:35 215294 0

原创 (精华)2020年8月30日 面向对象设计原则(五)-接口隔离原则(Interface Segregation Principle or ISP)

接口隔离原则(Interface Segregation Principle or ISP) 客户端不应该依赖它不需要的接口。 一个类对另外一个类的依赖性应当是建立在最小的接口上的。 示例 public abstract class InvoiceBase { string Invoic...

2020-08-30 00:04:13 215313 0

原创 (精华)2020年8月30日 面向对象设计原则(四)-依赖倒置原则(Dependence Inversion Principle DIP)

依赖倒置原则(Dependence Inversion Principle DIP ) 高层模块不应该依赖低层模块,他们都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。 简单的定义为:面向接口(抽象)编程,不要面向实现编程。 什么是高层模块?简单地说,就是封装的层级高,我们就认为其是高...

2020-08-30 00:03:56 215256 0

原创 (精华)2020年8月30日 面向对象设计原则(三)-里氏替换原则(Liskov Substitution Principle or LSP)

里氏替换原则(Liskov Substitution Principle or LSP) 所有引用基类的地方必须透明的使用其子类的对象。 在代码中将基类对象转换成其子类对象,不应当产生任何错误或异常。 示例 namespace Liskov; public abstract class Shap...

2020-08-30 00:03:43 215287 0

原创 (精华)2020年8月30日 面向对象设计原则(二)-开放闭合原则(Open-Closed Principle or OCP)

开放闭合原则(Open-Closed Principle or OCP) 开放闭合原则又叫开闭原则,即软件实体应当对扩展开放,对修改封闭。 开闭原则就是指软件实体应当尽量保证在不修改原有代码的情况下,对软件进行扩展。开闭原则是面向对象设计的基石。 示例 public interface IMobi...

2020-08-30 00:03:27 215319 0

原创 (精华)2020年8月30日 二十三种设计模式(二十三)-访问者模式(Vistor Pattern)

访问者模式(Vistor Pattern) 访问者模式属于行为型模式,表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。 结构对象是使用访问者模式必备条件,而且这个结构对象必须存在遍历自身各个对象的方法。 角色 1、抽象访问者(Visitor)...

2020-08-30 00:02:53 215313 0

原创 (精华)2020年8月30日 二十三种设计模式(二十二)-模板方法模式(Template Method Pattern)

模板方法模式(Template Method Pattern) 模板方法模式属于行为型模式,定义一个模板结构,将具体内容延迟到子类去实现。 在不改变模板结构的前提下在子类中重新定义模板中的内容。 角色 1、抽象类(Abstract Class) 实现了模板方法,定义了算法的框架; 2、具体类(Co...

2020-08-30 00:02:44 215304 0

原创 (精华)2020年8月30日 二十三种设计模式(二十一)-策略模式(Stragety Pattern)

策略模式(Stragety Pattern) 策略模式属于行为型模式,它定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。 使用策略模式可以把行为和环境分割开来。环境类负责维持和查询行为类,各种算法则在具体策略类中提供。 角色 1、抽象策略(S...

2020-08-30 00:02:23 215337 0

原创 (精华)2020年8月29日 二十三种设计模式(二十)-状态模式(State Pattern)

状态模式(State Pattern) 状态模式属于行为型模式,它允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。 角色 1、抽象...

2020-08-29 09:02:23 215959 0

原创 (精华)2020年8月29日 二十三种设计模式(十九)-观察者模式(Observer Pattern)

观察者模式(Observer Pattern) 观察者模式属于行为型模式,有时又被称为模型-视图(Model-View)模式、发布-订阅(Publish-Subscribe)模式、源-监听器(Source-Listener)模式或从属者(Dependents)模式。 观察者模式完美的将观察者和被观...

2020-08-29 08:59:20 215951 0

原创 (精华)2020年8月29日 二十三种设计模式(十八)-备忘录模式(Memento Pattern)

备忘录模式(Memento Pattern) 备忘录模式属于行为型模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 备忘录模式为我们提供了“后悔药”的机制,为我们在需要的时候,可以将对对象的修改撤销甚至重做。 角色 1、原...

2020-08-29 08:55:40 215925 0

原创 (精华)2020年8月29日 二十三种设计模式(十七)-中介者模式(Mediator Pattern)

中介者模式(Mediator Pattern) 中介者模式属于行为型模式,它包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用,从而使它们可以松散耦合。 当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用,保证这些作用可以彼此独立的变化。 角色 1、抽象中介者(Medi...

2020-08-29 08:51:41 215930 0

原创 (精华)2020年8月29日 二十三种设计模式(十六)-迭代器模式(Iterator Pattern)

迭代器模式(Iterator Pattern) 迭代器模式属于行为型模式,它提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。 角色 1、迭代器(Iterator) 迭代器角色负责定义访问和遍历元素...

2020-08-29 08:48:31 215942 0

原创 (精华)2020年8月29日 二十三种设计模式(十五)-解释器模式(Interpreter Pattern)

解释器模式(Interpreter Pattern) 解释器模式属于行为型模式,给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。 解释器模式提供了评估语言的语法或表达式的方式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被广泛地应用在...

2020-08-29 08:44:27 215945 0

原创 (精华)2020年8月29日 二十三种设计模式(十四)-命令模式(Command Pattern)

命令模式(Command Pattern) 命令模式属于行为型模式,它尝试将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 在该设计模式中,请求以命令的形式包裹在对象中并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象请求执行。 角色 1、抽象命令...

2020-08-29 08:36:24 215942 0

原创 (精华)2020年8月29日 二十三种设计模式(十三)-职责链模式(Chain of Responsibility Pattern)

职责链模式(Chain of Responsibility Pattern) 职责链模式属于行为型模式,它为请求创建了一个接收者对象的链。这种模式给予一个具体请求的类型,对请求的发送者和接收者进行解耦。 通常有2种方法来实现该模式。第1种是每个接收者都包含对下一个接收者的引用,以便在不能处理该请求...

2020-08-29 08:31:15 215914 0

原创 (精华)2020年8月29日 二十三种设计模式(十二)-代理模式(Proxy Pattern)

代理模式(Proxy Pattern) 代理模式属于结构型模式,为其他对象提供一种代理以控制对这个对象的访问。 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 角色 1、抽象主题(Subject) 通过接口或抽象类声明真实角色实现的业务...

2020-08-29 08:27:42 215962 0

原创 (精华)2020年8月29日 二十三种设计模式(十一)-享元模式(Flyweight Pattern)

享元模式(Flyweight Pattern) 享元模式属于结构型模式,它以共享的方式高效的支持大量的细粒度对象。通过复用内存中已存在的对象,降低系统创建对象实例的性能消耗。 享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象,如果找到对象,则直接返回。 角色 1、抽象享元(Fly...

2020-08-29 08:19:08 215935 0

原创 (精华)2020年8月28日 二十三种设计模式(零)-简单工厂模式(Simple Factory Pattern)

简单工厂模式属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GoF设计模式之一。学习简单工厂模式是学习其它工厂模式的前提条件。 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不...

2020-08-28 15:34:11 222237 0

原创 (精华)2020年8月28日 数据结构与算法解析(哈希查找)

哈希查找的实际目的其实非常简单,就是利用空间换时间. 哈希技术是在记录的存储位置和记录的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个确定的对应关系找到给定值的映射f(key),若查找集合中存在这个记录,则必定在f(key)的位置上。哈希技术...

2020-08-28 15:14:45 222225 0

原创 (精华)2020年8月28日 数据结构与算法解析(分块查找)

分块查找要求是顺序表,分块查找又称索引顺序查找,它是顺序查找的一种改进方法。 将n个数据元素"按块有序"划分为m块(m ≤ n)。 每一块中的结点不必有序,但块与块之间必须"按块有序"; 即第1块中任一元素的关键字都必须小于第2块中任一元素的关键字; 而第...

2020-08-28 15:10:36 222490 0

原创 (精华)2020年8月28日 数据结构与算法解析(二叉树排序)

1、二叉树排序 二叉树排序是构建在二叉排序树(Binary Sort Tree)上的算法,二叉排序树或者是一棵空树,或者是具有下列性质的二叉树。二叉树排序需要先生成一个二叉排序树,再使用中序遍历输出所有数据。 1.1 算法描述 二叉树排序是构建在二叉排序树(Binary Sort Tree)上的算...

2020-08-28 14:34:09 221970 0

原创 (精华)2020年8月28日 数据结构与算法解析(树查找)

二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: 若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值; 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值; 左、右子树也分别为二叉排序树。 二叉树查找需要先生成一个二叉排序树,再遍历所有节点逐一比较其值与关键字是否...

2020-08-28 14:02:52 222202 0

原创 (精华)2020年8月28日 数据结构与算法解析(斐波那契查找)

斐波那契查找是区间中单峰函数的搜索技术,它在二分查找的基础上根据斐波那契数列进行分割的。在斐波那契数列找一个等于或略大于查找表中元素个数的数F[n],如果原查找表长度不足F[n],则补充重复最后一个元素,直到满足F[n]个元素时为止。完成后进行斐波那契分割,即F[n]个元素分割为前半部分F[n-1...

2020-08-28 13:35:09 220449 0

原创 (精华)2020年8月28日 数据结构与算法解析(插值查找)

插值查找是二分查找的更高效版本,它不会每次按2平分原问题规模,而是应用一个技巧来尽快的接近目标关键字。 示例 public class Program { public static void Main(string[] args) { int[] array = { 8...

2020-08-28 12:00:37 222225 0

原创 (精华)2020年8月28日 数据结构与算法解析(二分查找)

二分查找(跟二叉查找树原理类似,但数据存储方式不同),它效率高,但是有一个明确的要求就是必须是有序的线性结构,在C#中常用Array,ArrayList,List等数据结构。 二分查找非递归版: static int BinaryFind1(int[] arr, int value) { ...

2020-08-28 11:31:00 222602 0

原创 (精华)2020年8月28日 数据结构与算法解析(顺序查找)

一、顺序查找:顾名思义,就是从头开始一直找到结束,找到了就返回,否则继续找,找完了没找到就返回-1 普通版 static int SequenceFind(int[] arr,int value) { for (int i = 0; i < arr.Length-1; i++) ...

2020-08-28 11:21:48 222564 0

原创 (精华)2020年8月28日 数据结构与算法解析(基数排序)

1、基数排序(Radix Sort) 基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。 1.1 算法描述 取得数组中的最大数,...

2020-08-28 10:30:54 222373 0

提示
确定要删除当前文章?
取消 删除