计算机基础
文章平均质量分 55
patriot_28
这个作者很懒,什么都没留下…
展开
-
快速排序算法(PHP实现)
方法1<?php$arr=[2,13,1,5,99,234,23];function quick_sort($arr){ $arr_total=count($arr); if($arr_total>1){ $mid=$arr[0]; $arr_left=[]; $arr_right=[]; for($i=1;$i<$arr_total;$i++){ if($mid>$arr[$i]){ $arr_left[]=$arr[$i]原创 2020-06-01 10:39:26 · 151 阅读 · 0 评论 -
B树和B+树简介
B树特性B树,又称多路平衡查找树,B树中所有节点的孩子个数的最大值称为B树的阶,通常用m表示。一棵m阶B树或为空树,或为满足如下特性的m叉树:树中每个节点至多有m棵子树,即至多含有m-1个关键字。若根节点不是终端节点,则至少有两棵子树。除根节点外的所有非叶节点至少有ceil(m/2)棵子树,即至少含有ceil(m/2)-1个关键字。所有非叶节点的结构如下:|n|P0|K1|P1|K2|P2|…|Kn|Pn|其中,Ki(i=1,2,…,n)为节点的关键字,且满足K1 < K2 <原创 2021-08-04 17:39:01 · 298 阅读 · 0 评论 -
平衡二叉树及PHP实现~
性质平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),除了具有二叉查找树的性质,还具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树也是平衡二叉树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。平衡因子一个节点的平衡因子就是该节点左子树的高度减原创 2021-08-04 15:07:11 · 277 阅读 · 1 评论 -
KMP算法及PHP实现
简介模式匹配(Pattern Matching) 即子串定位运算(Index函数)。算法目的:确定主串中所含子串第一次出现的位置(定位) ——即如何实现 Index(S,T,pos)函;初始条件:串S和T存在,T是非空串,1≤pos≤StrLength(s) 操作结果:若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个字符之后第一次出现的位置;否则函数值为0。注:S称为被匹配的串,T称为模式串。若S包含串T,则称“匹配成功”。否则称 “匹配不成功” 。对于KMP算法,看代码比看各种介原创 2021-07-24 08:52:40 · 348 阅读 · 5 评论 -
霍夫曼树分析及PHP实现
概念路径:树中一个结点到另一个结点之间的分支序列构成两个结点间的路径路径长度:路径上的分支数目树的路径长度:树根到每个结点的路径长度的和结点带权路径长度:结点到树根的路径长度与结点的权的乘积树的带权路径长度:树的带权路径长度为树中所有叶子节点的带权路径长度之和,通常记作WPL=∑WkLk。假设有n个权值{w1,w1,…wn},试构造一棵有n个叶子节点的二叉树,每个叶子节点带权为wi,则其中带权路径长度WPL最小的二叉树称作最优二叉树或霍夫曼树。前缀编码:设计长短不等的编码,必须是任一字符的编原创 2021-07-23 20:04:06 · 330 阅读 · 3 评论 -
掌握了数据存储方式基本上就掌握了数据结构
线性表顺序存储// 静态分配typedef struct{ ElemType data[MaxSize]; int length;} SqList;// 动态分配typedef struct{ ElemType *data; // 存储空间基址 int MaxSize; // 当前分配的存储容量 int length; // 当前长度} SqlList;链式存储// 单链表typedef struct LNode{ ElemType data; struct LNod原创 2021-07-21 10:31:29 · 111 阅读 · 0 评论 -
红黑树原理分析及PHP实现
简介红黑树二叉搜索树中的一种,可以保证在最坏情况下基本动态集合操作(SEARCH、PREDECESSOR、SUCCESSOR、MINIMUM、MAXIMUM、INSERT、INSERT)的时间复杂度为O(log n)。红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。红黑树的应用比较广泛,主要是用它来存储有序的数原创 2021-06-23 00:26:05 · 466 阅读 · 1 评论 -
一句话解释:闭包
闭包可以理解成“定义在一个函数内部的函数“。该函数作为返回值返回,该函数可以调用所在函数体的变量。所以说在本质上,闭包是将函数内部和函数外部连接起来的桥梁。由于调用该函数一直没有被释放,所以其所调用的变量也不被释放。...原创 2021-05-23 11:11:15 · 162 阅读 · 0 评论 -
一句话解释:协程与普通线程有何不同?
协程与普通线程不同之处在于,在同一时间可以有多个线程处于运行状态,但对于协程来说只能有一个,其它的协程都会处于暂停的状态。此外,普通线程是抢占式的,哪个线程能得到资源由操作系统决定,而协程是协作式的,执行权由用户态自行分配。补充注释:1.协程:协程是一种轻量级的线程,由用户代码来调度和管理,而不是由操作系统内核来进行调度,也就是在用户态进行。可以直接的理解为就是一个非标准的线程实现,但什么时候切换由用户自己来实现,而不是由操作系统分配 CPU 时间决定。...原创 2021-04-15 14:53:33 · 184 阅读 · 0 评论 -
咱重新过一下几个专业基础概念吧
1.程序程序是指令和数据的集合。2.算法算法就是求解问题的方法和步骤。算法的五大特性:输入: 算法具有0个或多个输入输出: 算法至少有1个或多个输出有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成确定性: 算法中的每一步都有确定的含义,不会出现二义性可行性: 算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成3.数据结构数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。4.面向对原创 2021-04-06 13:58:16 · 86 阅读 · 0 评论 -
3大类型、23种设计模式简要介绍
设计模式3大类型一、创建型模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。简单工厂模式(Simple Factory Pattern):就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。分三种:普通简单工厂–通过对参数进行条件判断返回不同实例对象、多方法简单工厂–提供多个工厂方法,分别创建对象、静态方法简单工厂–将多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。工厂模式(Factory Pattern):定义一个创建对象的接口原创 2021-02-24 16:27:24 · 215 阅读 · 0 评论 -
面向对象设计三大原则(封装变化点,对接口进行编程,多使用组合而不是继承)代码示例
封装变化点。隔离变化点的好处在于,将系统中经常变化的部分和稳定的部分隔离,有助于增加复用性,并降低系统耦合度。很多设计模式的意图中都明显地指出了其对问题的解决方案,学习设计模式的要点是发现其解决方案中封装的变化点。代码:<?php// 动物abstract class Animal{ // 封装变化,就是把不变的部分提取出来,所有的动物都会叫 abstract public function cry();}// 变化部分,不同的动物,叫声不一样class Dog extend.原创 2020-11-22 06:25:50 · 807 阅读 · 0 评论 -
烂笔头之Java Web基础
JDK(Java Development Kit)为java程序开发提供了编译和运行环境,使用JDK可以将java程序编译成字节码文件(.class文件)。JDK有三个版本:J2SE标准版,主要用于开发桌面应用程序J2EE企业版,主要用来开发企业级应用,如电子商务网站、ERP系统J2ME微缩版,主要用来开发移动设备、嵌入式设备上的java应用JDK安装后包括的几个主要文件夹介绍如下:bin:开发工具,包含了开发、执行、调试Java程序所用的工具和实用程序以及开发工具所需要的类库和支持文.原创 2020-10-25 02:08:40 · 185 阅读 · 0 评论 -
烂笔头之C语言基础
如何提高C语言的编程效率以空间换时间,充分利用内存使用高效的算法,如使用高斯算法求1至100的和使用使用位操作嵌入汇编使用typdef可以定义新的类型(其实就是别名),如typedef int INTEGER;使用auto声明的自动变量属于局部变量,关键字auto可以省略用static关键字声明外部变量,会得到静态全局变量,或者称为静态外部变量,该变量只限于本文件内使用。用register关键字定义的变量(只有局部变量可以这么定义)只是提示编译器将变量定义为寄存器变量,但不是必须将.原创 2020-10-21 23:53:43 · 362 阅读 · 2 评论 -
面向对象编程和函数式编程的本质差别
面向对象编程是从事物本身的角度出发,将现实世界中的事物抽象成对象后再使用继承、依赖等关系对现实世界进行建模。函数式编程则更多从事物与事物之间的关系出发,通过类似y=f(x)的方式进行“流水线”式的操作。函数式编程中,函数和其他值一样,可以到处被定义,可以作为参数传入另一个函数,也可以作为函数的返回值,返回给调用者。利用这些特性,可以灵活组合已有函数形成新的函数,可以在更高层次上对问题进行抽象。...原创 2020-10-09 10:19:51 · 453 阅读 · 0 评论 -
《计算机是怎样跑起来的》要点记录
计算机的三大原则硬件:看得见、摸得着的设备,如主机、显示器、键盘。软件:计算机所执行的程序,即软件和指令。程序是指令的集合。无论哪个程序,其内容都是数值的罗列,每个数值要么是指令、要么是数据。输入、运算、输出是硬件的基础。指令就是控制计算机输入、运算、输出的命令。试着制造一台计算机吧CPU是Central Processing Unit(中央处理器)的缩写。CPU上数据总线的t条数,或者CPU内部参与运算的寄存器数量,都可以作为衡量CPU性能的比特数。输出时钟信号的元件叫做“时钟发生原创 2020-09-27 00:27:11 · 134 阅读 · 0 评论 -
《程序是怎样跑起来的》,计算机程序很复杂吗?
CPU和内存程序是指令和数据的集合。内存地址是用来表示命令和数据存储位置的数值。主存通过控制芯片与CPU相连。主存中的指令和数据会随着计算机的关机自动清除。CPU负责程序的解释和执行,内部包括寄存器、控制器、运算器、时钟。寄存器可以用来存储指令、数据等处理对象,可以看做内存的一种。CPU是寄存器的集合体。内存的存储场所通过地址编号来区分,寄存器的种类通过名字区分。程序的流程由程序计数器决定。分支和循环使用跳转指令。函数调借助栈用使用CALL指令和RETURN指令。通过基址寄存器和变址寄存器可以实原创 2020-09-25 00:00:14 · 213 阅读 · 0 评论 -
Model、Entity、DAO、Domain、Data、Logic、Repository、Service、Controller、View等各层的作用区分
EntityEntity(实体)包中的类和数据库中的表时一一对应关系,包括字段名称、数据类型。Model一般地,Model(模型)存的是实体(Entity)类的模型。为了给前端提供实际使用的数据,一般在Model会对某些字段等进行处理,如表里存的性别字段,gender,保存的是f/m,但是提供给前端的时候需要把f/m替换成女/男。还可以添加新的字段,如把省province、市city、区district、地址address合并成新的字段detailed_address:省+市+区+地址。Domain原创 2020-09-23 20:31:07 · 4096 阅读 · 0 评论 -
用动态代理实现AOP切面编程,PHP代码演示
代码:<?phpclass DynamicProxy{ private $obj; private $regPrePosts=[]; public function __construct($obj) { $this->regPrePosts=[]; $this->obj=$obj; } public function registerPrePost($type, $obj) { if('pre'==$type){ $this->regP原创 2020-09-20 10:19:31 · 179 阅读 · 0 评论 -
访问者模式(Visitor Pattern)- PHP示例
访问者模式(Visitor Pattern)在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。意图:主要将数据结构与数据操作分离。主要解决:稳定的数据结构和易变的操作耦合问题。何时使用:需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些原创 2020-09-05 22:58:12 · 120 阅读 · 0 评论 -
模板模式(Template Pattern) - PHP示例
模板模式(Template Pattern)在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。主要解决:一些方法通用,却在每一个子类都重新写了这一方法。何时使用:有一些通用的方法。如何解决:将这些通用算法抽象原创 2020-09-05 22:42:46 · 132 阅读 · 0 评论 -
策略模式(Strategy Pattern)-PHP示例
策略模式(Strategy Pattern)在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。何时使用:一个系统有许多许多类,而区分原创 2020-09-05 22:38:48 · 97 阅读 · 0 评论 -
空对象模式(Null Object Pattern) - PHP示例
空对象模式(Null Object Pattern)在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。示例代码:<?phpabstract class Abstra原创 2020-09-04 23:12:23 · 167 阅读 · 1 评论 -
状态模式(State Pattern)- PHP示例
状态模式(State Pattern)在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。意图:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。何时使用:代码中包含大量与对象状态有关的条件语句。如何解决:将各种具体的状态原创 2020-09-04 23:09:28 · 91 阅读 · 0 评论 -
备忘录模式(Memento Pattern)- PHP示例
备忘录模式(Memento Pattern)备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。何时使用:很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状原创 2020-09-04 22:48:16 · 120 阅读 · 0 评论 -
中介者模式(Mediator Pattern)-PHP示例
中介者模式(Mediator Pattern)中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之原创 2020-09-03 22:21:55 · 100 阅读 · 0 评论 -
迭代器模式(Iterator Pattern)-PHP示例
迭代器模式(Iterator Pattern)迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。主要解决:不同的方式来遍历整个整合对象。何时使用:遍历一个聚合对象。如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象。关键代码:定义接口:hasNext, next。原创 2020-09-03 22:14:40 · 85 阅读 · 0 评论 -
解释器模式(Interpreter Pattern)-php示例
解释器模式(Interpreter Pattern)解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL解析、符号处理引擎等。意图:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。主要解决:对于一些固定文法构建一个解释句子的解释器。何时使用:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表原创 2020-09-03 22:05:24 · 124 阅读 · 0 评论 -
命令模式(Command Pattern)-PHP示例
命令模式(Command Pattern)命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太原创 2020-09-02 19:16:45 · 169 阅读 · 0 评论 -
责任链模式(Chain of Responsibility Pattern)-PHP示例
责任链模式(Chain of Responsibility Pattern)顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一原创 2020-09-02 19:08:07 · 96 阅读 · 0 评论 -
观察者模式(Observer Pattern)-PHP 示例
观察者模式(Observer Pattern)意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。如何解决:使用面向对象技术,可以将这种依赖关系弱化。关键代码:在抽象类里有一个 ArrayList 存放观察者们。优点:1、观原创 2020-09-02 19:01:37 · 116 阅读 · 0 评论 -
MVC模式-PHP示例
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。Model(模型) - 模型代表一个存取数据的对象。它也可以带有逻辑,在数据变化时更新控制器。View(视图) - 视图代表模型包含的数据的可视化。Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。Model:class Student{ private $stuNo; private原创 2020-08-31 23:01:53 · 97 阅读 · 0 评论 -
享元模式(Flyweight Pattern)-PHP示例
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。意图:运用共享技术有效地支持大量细粒度的对象。主要解决:在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。何时使用: 1、系统中有大量对象。 2、这些对象消耗大量内存。 3、这些对象的状态大部分可以外部化。 4、这些对象可以原创 2020-08-31 22:41:31 · 75 阅读 · 0 评论 -
外观模式(Facade Pattern)-PHP示例
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。何时使用: 1、客户端不需要知道系统原创 2020-08-31 22:35:00 · 92 阅读 · 0 评论 -
组合模式(Composite Pattern)-PHP示例
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单原创 2020-08-31 22:18:48 · 205 阅读 · 0 评论 -
过滤器模式(Filter Pattern)-PHP实现
过滤器模式(Filter Pattern)/标准模式(Criteria Pattern)过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。这是对符合条件的对象进行过滤,不是简单的对传递的参数进行判断。示例代码:<?phpclass User{ private $gender='male原创 2020-08-30 20:34:22 · 147 阅读 · 0 评论 -
桥接模式(Bridge Pattern)-PHP实现
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。意图:将抽象部分与实现部分分离,使它们都可以独立的变化。主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。何时使用:实现系统可能有多个角度分类,每一种角度都可能变化。如何解决:把这种多角度分类分离出来,让原创 2020-08-30 20:05:55 · 89 阅读 · 0 评论 -
适配器模式(Adapter Pattern)-PHP实现
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。意图:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。主要解决:主要解决在软件系统中,常常要将原创 2020-08-29 21:21:51 · 101 阅读 · 0 评论 -
装饰器模式(Decorator Pattern)-PHP实现
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。主要解决:一般的,我们为了扩展一个类经常使用原创 2020-08-29 21:07:59 · 165 阅读 · 0 评论 -
代理模式(Proxy Pattern)-PHP实现
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。意图:为其他对象提供一种代理以控制对这个对象的访问。主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层原创 2020-08-29 20:53:45 · 154 阅读 · 0 评论