
数据结构、算法、设计模式
文章平均质量分 77
数据结构、算法、设计模式
baiiu
这个作者很懒,什么都没留下…
展开
-
设计模式 状态机
本文梳理状态机概念,在实操中状态机和类似,只是被封装起来,可以很方便的实现状态初始化和状态转换。原创 2023-02-19 22:02:13 · 1480 阅读 · 0 评论 -
设计模式总结
1. 面向对象设计原则单一职责原则(Single Responsibility Principle)一个类中应该是一组相关性很高的函数,对相关性很高的数据进行封装。开闭原则(Open Close Principle)软件中的对象(类、模块、函数等)应该对扩展开放,对修改封闭。当我们嗅到原来的代码腐化气味时,应该尽早的重构,以便使代码恢复到正常的进化过程,而不是通过继承等方式实现,...原创 2019-08-01 07:02:13 · 222 阅读 · 0 评论 -
算法 常见的排序算法
排序的稳定性因为待排序的记录序列中可能存在两个或两个以上的关键字相等的记录, 排序结果可能会存在不唯一的情况。所以就有稳定与不稳定的定义。假设ki=kj( 1 =< i <= n,1 =< j <= n, i != j),且在排序前的序列中ri领先于rj。如果排序后ri仍领先于rj,则称所用的排序方法是稳定的;反之,若可能使得排序后的序列中rj领先于ri,则...原创 2017-05-23 11:44:36 · 4500 阅读 · 6 评论 -
算法 二叉树遍历 递归和非递归
前言本篇文章介绍二叉树的几种遍历方法:前序遍历、中序遍历、后序遍历和层序遍历。 包含递归和非递归遍历。二叉树表示结点表示,构造二叉树public class BiNode { public String data; public BiNode lChild; public BiNode rChild; public BiNode(String data) {原创 2017-05-23 11:49:36 · 939 阅读 · 1 评论 -
算法 字符串匹配算法
子串的定位操作通常称为串的模式匹配。1. 朴素的模式匹配算法Native String Matching Algorithm朴素的模式匹配算法又称为暴力匹配算法(Brute Force Algorithm),采用遍历的方式进行匹配,滑动窗口总是1,会产生很多重复的比较,容易理解,但效率低。算法思想 从目标串的的第一个字符起与模式串的第一个字符比较,若相等,则继续对字符进行后续的比较,否则目标串从原创 2017-05-23 11:46:31 · 1031 阅读 · 1 评论 -
算法 有向无环图 拓扑排序
1. 如何构造图邻接矩阵(二维数组) 图的邻接矩阵存储方式是用两个数组来表示图,一个一维数组存储图中顶点信息,一个二维数组存储图中边或弧的信息。邻接表 图中顶点信息用一个一维数组存储,还需存储指向第一个邻接点的指针,以便于查找该顶点的边信息。 其中每个顶点的所有邻接点构成一个线性表,由于邻接点的个数不定,所以用单链表存储。无向图成为顶点v的边表,有向图成为顶点v作为弧尾的出边表。等等其他表原创 2017-05-23 11:48:21 · 3646 阅读 · 1 评论 -
算法 排列、组合 相关
字符串的去重全排列public class Permutation { public static void main(String[] args) { String s = "abc"; permutation(s.toCharArray(), 0); } /* 从第一个字符起,挨个与后面每个字符交换。 */ pr原创 2017-08-15 07:58:38 · 530 阅读 · 1 评论 -
面向对象设计原则
1. 单一职责原则(Single Responsibility Principle)定义: 一个类中应该是一组相关性很高的函数,对相关性很高的数据进行封装。因为单一职责的划分界限并不总是那么清晰,很多时候都需要个人经验来界定。界定该类的职责,和怎么划分类的职责。2. 开闭原则(Open Close Principle)定义: 软件中的对象(类、模块、函数等)应该对扩展开放,对修改封闭。它是Ja原创 2016-03-05 18:18:02 · 506 阅读 · 0 评论 -
设计模式 基础概念
1. 什么是模式:模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。【A pattern is a successful or efficient solution to a recurring problem within a context】 每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的成原创 2016-07-17 23:11:32 · 1798 阅读 · 1 评论 -
设计模式(六) 建造者模式
Builder Pattern1. 什么是建造者模式建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式是一种对象创建型模式。什么是复杂对象?简单来说,复杂对象是指那些包含多个成员属性的对象,这些成员属性也称为部件或零件。建造者模式将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的原创 2016-07-20 15:08:57 · 494 阅读 · 0 评论 -
设计模式(七) 适配器模式
Adapter Pattern1. 什么是适配器模式适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式将一原创 2016-07-20 19:11:54 · 638 阅读 · 0 评论 -
设计模式(八) 桥接模式
Bridge Pattern1. 什么是桥接模式桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。 它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。 与多层继承原创 2016-07-21 15:10:28 · 1210 阅读 · 0 评论 -
设计模式(九) 组合模式
Composite Pattern1. 什么是组合模式组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式。 它是一种对象结构型模式。组合模式的关键是定义了一个抽象构件类,它既可以代表叶子,又可以代表容器,原创 2016-07-21 17:36:59 · 681 阅读 · 0 评论 -
设计模式(十) 装饰模式
Decorator Pattern1. 什么是装饰模式装饰模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。 装饰模式是一种对象结构型模式。装饰类的引入将大大简化本系统的设计,它也是装饰模式的核心。 装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为。装饰模式是一种用于替代继承的技术,它通过一种无须原创 2016-07-21 23:45:08 · 544 阅读 · 0 评论 -
设计模式(十一) 外观模式(门面模式)
Facade Pattern1. 什么是外观模式外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式又称为门面模式,它是一种对象结构型模式。 外观模式中,一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户类与子系统的内部复杂性分隔开,使得客户类只需要与外观角色打交道,而不需要与子系统内部的很多对象打交道。它原创 2016-07-22 10:41:24 · 517 阅读 · 0 评论 -
设计模式(十二) 享元模式
Flyweight Pattern1. 什么是享元模式享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。享元模式以共享的方式高效地支持大量细粒度对象的重用,享元对象能做到共享的关键是区原创 2016-07-22 14:52:50 · 693 阅读 · 0 评论 -
设计模式(十三) 代理模式和Java动态代理
Proxy Pattern1. 什么是代理模式代理模式:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。 代理模式是一种对象结构型模式。在代理模式中引入了一个新的代理对象,代理对象在客户端对象和目标对象之间起到中介的作用,它去掉客户不能看到的内容和服务或者增添客户需要的额外的新服务。主要解决的问题是:在直接访问对象时带来的问题。2. 代理模式类角色解析,为了让客户端能够一致性地对待原创 2016-07-22 17:26:11 · 666 阅读 · 0 评论 -
设计模式(十四) 职责链模式
Chain of Responsibility Pattern1. 什么是职责链模式职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 职责链模式是一种对象行为型模式。职责链可以是一条直线、一个环或者一个树形结构,最常见的职责链是直线型原创 2016-07-25 10:20:28 · 667 阅读 · 0 评论 -
设计模式(十五) 命令模式
Command Pattern1. 什么是命令模式命令模式(Command Pattern):将一个请求封装为一个对象,从而使用不同的参数调用不同的请求 命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。在命令原创 2016-07-25 17:20:25 · 1029 阅读 · 0 评论 -
设计模式(十六) 解释器模式
Interpreter Pattern1. 什么是解释器模式解释器模式(Interpreter Pattern):定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,这里的“语言”是指使用规定格式和语法的代码。解释器模式是一种类行为型模式。它用于描述如何使用面向对象语言构成一个简单的语言解释器。在某些情况下,为了更好地描述某一些特定类型的问题,我们可以创建一种新的语言,这种语言拥有...原创 2018-12-18 07:21:30 · 249 阅读 · 0 评论 -
设计模式(十七) 迭代器模式
Iterator Pattern1. 什么是迭代器模式迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。聚合对象是来存储一系列数据。聚合对象拥有两个职责:一是存储数据;二是遍历数据。从依赖性来看,前者是聚合对象的基本职责;而后者既是可变化的,又是可分离的。因此,可以将遍...原创 2018-12-19 07:57:44 · 240 阅读 · 0 评论 -
设计模式(五) 原型模式
Prototype Pattern1. 什么是原型模式原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式是一种对象创建型模式。它是一种“另类”的创建型模式,创建克隆对象的工厂就是原型类自身,工厂方法由克隆方法来实现。它的原理是将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝自己来实现创建过原创 2016-07-20 11:01:13 · 731 阅读 · 0 评论 -
设计模式(四) 单例模式
Singleton Pattern什么是单例模式单例模式(Singleton Pattern):确保某一个类只有一个实例,向整个系统提供这个唯一实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。 单例模式是结构最简单的设计模式一,在它的核心结构中只包含一个被称为单例类的特殊类。单例模式的各种写法,推荐使用枚举:1. 饿汉式/* 加载类时就初始化,如果不用浪费内存原创 2016-07-19 16:09:39 · 775 阅读 · 0 评论 -
设计模式(十八) 中介者模式
Mediator Pattern1. 什么是中介者模式中介者模式(Mediator Pattern):用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。如果在一个系统中对象之间的联系呈现为网状结构,对象之间存在大量的多对多联系,将导致系统非常复杂,这些对...原创 2018-12-20 00:30:07 · 330 阅读 · 0 评论 -
设计模式(十九) 备忘录模式
Memento Pattern1. 什么是备忘录模式备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名为Token。2. 备忘录模式类角色解析备忘录模式结构图:Originator(原发器):它是一个普通类,可以创建一个备忘录,并存储它的当前...原创 2018-12-20 07:37:55 · 253 阅读 · 0 评论 -
设计模式(二十) 观察者模式
Observer Pattern1. 什么是观察者模式观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependen...原创 2018-12-20 23:24:49 · 289 阅读 · 0 评论 -
设计模式(二十一) 状态模式
State Pattern1. 什么是状态模式状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态...原创 2018-12-21 08:35:31 · 374 阅读 · 1 评论 -
设计模式(二十二) 策略模式
Strategy Pattern1. 什么是策略模式策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。策略模式是一种对象行为型模式。策略模式的主要目的是将算法的定义与使用分开,也就是将算法的行为和环境分开,将算法的定义放在专门的策略类中,每一个策略类封装了一种实...原创 2018-12-22 09:26:07 · 327 阅读 · 0 评论 -
设计模式(二十三) 模板方法模式
Template Method Pattern1. 什么是模板方法模式模板方法模式(Template Method Pattern):定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子...原创 2018-12-22 15:33:15 · 314 阅读 · 0 评论 -
设计模式(二十四) 访问者模式
Visitor Pattern1. 什么是访问者模式访问者模式(Visitor Pattern):提供一个作用于某对象结构中的各元素的操作表示,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。如何为同一集合对象中的元素提供多种不同的操作方式?访问者模式就是一个值得考虑的解决方案,它可以在一定程度上解决上述问题(解决大部分问题)。访问者模式可...原创 2018-12-22 23:12:41 · 281 阅读 · 0 评论 -
设计模式(一) 简单工厂模式
Simple Factory Pattern1. 什么是简单工厂模式简单工厂模式(Simple Factory Pattern): 定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。简单工厂模式提供一个静态(static)方法来创建对象实例。 简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。2. 简单工厂原创 2016-07-18 22:29:31 · 827 阅读 · 0 评论 -
设计模式(二) 工厂方法模式
Factory Method Pattern1. 什么是工厂方法模式使用简单工厂模式时,添加一个实例对象时就要修改工厂类的代码,具体产品与工厂类之间的耦合度高,违背了开闭原则,使用工厂方法模式就能很好的解决这个问题。工厂方法模式(Factory Method Pattern) 定义一个用于创建工厂对象的接口,让子具体工厂类决定将实例化哪一个产品对象。 工厂方法模式提供一个抽象工厂接口来声明抽象工厂原创 2016-07-19 07:10:28 · 614 阅读 · 0 评论 -
设计模式(三) 抽象工厂模式
Abstract Factory Pattern1. 什么是抽象工厂模式抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形式。 在抽象工厂模式中,每一个具体工厂都提供了多个工厂方法用于产生多种不同类型的产品,这些产品构成了一个产品类别。 抽象工厂模式又称为Kit模式,它是一种对象创建型模式。抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只原创 2016-07-19 14:20:32 · 609 阅读 · 0 评论