上一页 1 2 3 4 5 6 7 ··· 14 下一页
摘要: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态 UML: 示例代码: 如果只有一个备忘录,可以取消备忘录管理者. 阅读全文
posted @ 2017-11-06 09:32 rorshach 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 用一个中介对象来封装一系列的对象交互,中介者使得各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互. 减少了各对象之间的耦合,使得可以独立的改变或复用各个Mediator或ColleagueMediator控制了交互,导致Mediator变的复杂 ps: 各个同事类需要知 阅读全文
posted @ 2017-11-06 09:25 rorshach 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 表示一个作用于某对象结构中各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 适用场景:1.适用于元素类数据结构相对稳定(类的方法固定,但属性可以变化,如果方法变化很大,就无法使用访问者)2.把数据的处理从数据结构上分离出来.3.需要一个结构对象角色,组合一系列的元素类. 阅读全文
posted @ 2017-11-06 08:48 rorshach 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 将一个请求封装成一个对象,从而可以用不同的请求对象对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作. 与状态模式和责任链模式的区别是,命令模式设定一次,统一执行 使用场景:1.可设计一个队列2.较容易将命令计入日志3.允许接收的一方是决定是否否决请求4.可以实现对请求的撤销和重做5. 阅读全文
posted @ 2017-11-06 08:12 rorshach 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 使多个对象都有机会处理处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着该链处理请求,直到有一个对象能够处理它为止. 相当于switch/case,在客户端指定了每一链的下一链. UML 示例代码: 这个手动设置下一处理者,还是有点不方便.有时候设置出错,容易导致死循 阅读全文
posted @ 2017-11-06 07:54 rorshach 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 它定义了算法家族,分别封装起来,让他们之间可互相替换,此模式让算法的变化,不会影响到使用算法的客户. UML 示例代码: 阅读全文
posted @ 2017-11-05 21:11 rorshach 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 当一个对象内在状态改变时允许改变其行为,这个对象看起来像是改变了其类.状态模式主要解决当控制一个对象状态转换条件表达式过于复杂时的情况,把状态判断逻辑移到表示不同状态的一系列类中.如果状态判断很简单,就没有必要用这个模式了. 1.相当于面向过程中的if/else,状态模式在每个独立的状态类中实现判断 阅读全文
posted @ 2017-11-05 21:03 rorshach 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 定义了一种一对多的依赖关系,多个观察者对象同时监听某一主题的变化,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们可以更新自己. 应用场景:某个实例的变化影响到了其他对象. UML: 示例代码: 阅读全文
posted @ 2017-11-05 20:56 rorshach 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 定义一个操作中的算法骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤 应用场景: A.操作步骤稳定,而具体细节延迟到子类. UML: 示例代码: 所有的商品类在用户购买前,都需要给用户显示出最终支付的费用.但有些商品需要纳税,有些商品可能有打折 阅读全文
posted @ 2017-11-05 20:47 rorshach 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 运用共享技术有效的支持大量细粒度的对象. 应用场景: A.减少对相同对象的重复创建 UML: 示例代码:如果在工厂中,有用户,我们就直接调用,没有用户,我们就获取.减少对同一uid的user对象的重复创建. 阅读全文
posted @ 2017-11-05 19:13 rorshach 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 将对象组合成树形结构以表示整体-部分的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性. UML: 示例代码:透明组合:叶节点和子节点具有相同的接口 示例代码:安全组合:接口中不强制实现增加和删除节点,叶节点不具备该两项功能. 阅读全文
posted @ 2017-11-05 18:25 rorshach 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 将抽象的部分与实现的部分分离,使它们都可以独立变化.抽象与实现的分离,指的是抽象类和派生类用来实现自己的对象.实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来,让他们独立变化,减少他们之间的耦合. 合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承.聚合是一种弱拥 阅读全文
posted @ 2017-11-05 17:32 rorshach 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 动态的给一个对象添加额外的一些职责,就增加功能而言,比继承更具灵活性. 如果仅有一个ConcreateComponent,也可以让Decorator继承ConcreateComponent来实现装饰功能,尽管这看起来很像适配器.但区别主要是语义上的. 何时使用:1.为已有对象动态添加更能多功能.2. 阅读全文
posted @ 2017-11-05 17:12 rorshach 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 为其他对象提供一种代理以控制对这个对象的访问. 使用场合: 1.远程代理:为一个对象在不同的地址空间提供局部代表,隐藏对象存在于不同地址空间的事实.2.虚拟代理:根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象.3.安全代理:用来控制真实对象访问时的权限.4.智能指引:当调用真实 阅读全文
posted @ 2017-11-05 16:50 rorshach 阅读(719) 评论(0) 推荐(0) 编辑
摘要: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 什么时候使用:1,开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。2,维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以 阅读全文
posted @ 2017-11-05 16:00 rorshach 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 将一个类的接口转换为用户期望的另外一个接口.适配器使得原本由于接口不兼容而不能一起工作的类可以一起工作 UML: 一.类适配器: 二.对象适配器: 三.接口适配器 要求现有类ExistClass适配接口DemoInterface 阅读全文
posted @ 2017-11-05 15:36 rorshach 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 应用场景:A.一个无状态的类使用单例,可以节省内存B.全局或配置类(其实这个也是无状态的)C.脚本或程序从运行开始到结束,仅需要一个实例来保证数据或条件的一致性(数据库连接,如user类的积分数据),注意这是在单线程模式下,多线程模式下是要处理 阅读全文
posted @ 2017-11-05 12:31 rorshach 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 用原型实例指定创建对象的种类,并且拷贝这些原型创建新的对象.应用场景: A.用new创建对象通常有较为复杂的数据准备或权限准备B.对象较大,拷贝对象可以节省内存 UML图: 阅读全文
posted @ 2017-11-05 11:18 rorshach 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 将一个复杂对象的创建与表示分离,使得同样的构建过程可以创建不同的表示. 应用场景: A.创建这个对象通常需要较多的参数,才能完整的表示该对象.B.类的各个组成部分的具体实现类或算法经常面临变化,但将他们组合在一起却相对稳定,提供一种封装机制 将稳定的组合算法于易变的各个组成部分隔离开来.C.不同的创 阅读全文
posted @ 2017-11-05 10:20 rorshach 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 应用场景: 一系列相互依赖的对象有不同的具体实现。提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合 UML: 代码示例: ps:与工厂方法相比,抽象工厂的接口中包含了所有产品的创建. 阅读全文
posted @ 2017-11-04 10:39 rorshach 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 最常用的实例化对象模式,用工厂方法替代了实例化对象. 应用场景:A.一个类的子类经常面临着剧烈变化,但却拥有较稳定的接口,或者说拥有相同的接口.工厂方法定义一个用于创建对象的接口,让子类来决定创建那个对象,将对象的实例化延迟.B.如给定一张图片,生成对应的图片并添加水印.图片格式有png,jpg等, 阅读全文
posted @ 2017-11-04 09:52 rorshach 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 一.创建型模式(解决对象的创建) 创建型模式抽象了实例化过程.它们帮助一个系统独立于如何创建/组合和表示它的那些对象.一个类创建模式使用继承改变被实例化的类,一个对象创建型模式将实例化委托给另一个对象. 特点:它们都将关于该系统使用哪些类封装起来.它们都隐藏了这些类的实例是如何被创建和放在一起的.整 阅读全文
posted @ 2017-11-04 09:48 rorshach 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 数据访问对象模式 该设计模式描述了如何创建提供透明访问任何数据源的对象. 阅读全文
posted @ 2017-10-29 17:50 rorshach 阅读(358) 评论(0) 推荐(0) 编辑
摘要: 一.单一职责: 不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 我们最开始设计了一个类Human,我们赋予了四项功能.以下是伪代码: 二.里氏替换原则: 所有引用基类的地方必须能透明地使用其子类的对象,也就是说子类可以扩展父类的功能,但不能改变父类原有的功能 三.依赖倒置: 高 阅读全文
posted @ 2017-10-29 17:23 rorshach 阅读(9605) 评论(0) 推荐(0) 编辑
摘要: SPL,PHP 标准库(Standard PHP Library) ,此从 PHP 5.0 起内置的组件和接口,并且从 PHP5.3 已逐渐的成熟。SPL 其实在所有的 PHP5 开发环境中被内置,同时无需任何设置。 一.spl_autoload_register 更加方便的惰性加载 二.Itera 阅读全文
posted @ 2017-10-25 11:04 rorshach 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 1.isset empty如果遇到null,isset判断为false;empty 判断为trueisset(var1, var2,...) 可以判断多个变量 2.unsetunset可以取消之前定义的变量,如果该变量没有被其他变量引用的话,就会释放这个变量占用的内存空间. 3.php5中对象的传递 阅读全文
posted @ 2017-10-21 23:34 rorshach 阅读(685) 评论(0) 推荐(0) 编辑
摘要: 注意: 本文的恢复,并不是基于恢复某个时间点的全量备份后的增量恢复,而是指在现有数据库基础上基于binlog的恢复.适用于较小的数据误操作. 提取日志文件为sql语句: /usr-ext/local/mysql/bin/mysqlbinlog --database=db_name --base64- 阅读全文
posted @ 2017-10-15 22:26 rorshach 阅读(1355) 评论(0) 推荐(0) 编辑
摘要: 2.冒泡排序(二维数组使用): 2.冒泡排序(数组使用): 3.slice扩容引起的问题:切片的数据结构: slice在扩容会生成一个新的slice,再将原来的slice拷贝到新的slice,然后append.这将导致元素的地址发生变化.示例: 因为有扩容,两次打印的slice数组的地址不一致. s 阅读全文
posted @ 2017-10-15 20:55 rorshach 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 一.new() 这是一个用来分配内存的内置函数,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配的 t 类型的零值的指针。在golang的代码定义如下: 二.struct{} 用struct{} 来初始化strut时,返回的是一个struct类型的值 三.示例 阅读全文
posted @ 2017-10-08 22:15 rorshach 阅读(562) 评论(0) 推荐(0) 编辑
摘要: var和const :变量和常量的声明var varName type 或者 varName : = valuepackage and import: 导入func: 用于定义函数和方法return :用于从函数返回defer someCode :在函数退出之前执行go : 用于并行select 用 阅读全文
posted @ 2017-10-08 22:10 rorshach 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 一.struct(结构体) go中的struct可以实现oop中的类、方法 1.创建 2.声明 3.初始化 4.方法: go语言中的oop很另类,类在go里面叫做receiver,receiver可以是除了interface之外的任何类型。方法和类并非组织在一起,传统的oop方法和类放在一个文件里面 阅读全文
posted @ 2017-10-08 22:09 rorshach 阅读(546) 评论(0) 推荐(0) 编辑
摘要: 一.创建 1.方式1 2.方式2 3.方式3 二.查找键是否存在 三.遍历 四.删除元素 五.map作为参数传递 map作为参数传递,是传递了一个引用 阅读全文
posted @ 2017-10-08 22:02 rorshach 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 一.数组 Go语言的数组也是一个元素类型相同的定长的序列 1.创建A.创建方式1: B.创建方式2: C.创建方式3: 2.数组的长度和容量len(array)和cap(array)求值,两者一致. 3.遍历数组 二.切片 切片是长度可变、容量固定的相同的元素序列 1.创建 除了make外,创建切片 阅读全文
posted @ 2017-10-08 21:59 rorshach 阅读(685) 评论(0) 推荐(0) 编辑
摘要: Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个异常。在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。在极个别的情况下 阅读全文
posted @ 2017-10-07 16:45 rorshach 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 一.出让时间片 runtime.Gosched() 二.同步锁 Go语言包中的sync包提供了两种锁类型:sync.Mutex和sync.RWMutex。Mutex是最简单的一种锁类型,同时也比较暴力,当一个goroutine获得了Mutex后,其他goroutine就只能乖乖等到这个gorouti 阅读全文
posted @ 2017-10-07 10:12 rorshach 阅读(364) 评论(0) 推荐(0) 编辑
摘要: 一.简介 select是Go语言特有的操作,使用select我们可以同时在多个channel上进行发送/接收操作.select的用法与switch语言非常类似,由select开始一个新的选择块,每个选择条件由case语句来描述。与switch语句可以选择任何可使用相等比较的条件相比,select有比 阅读全文
posted @ 2017-10-07 10:10 rorshach 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 一.基本语法 二.为什么要使用channel goroutine是Go语言中的轻量级线程实现,由Go运行时(runtime)管理.先看一个例子: 这个例子做了一件事情,在main函数中串行执行了5次Sub函数. 如果我们需要Sub函数能够并发的执行,我们加个go,将每一个Sub函数放在gorouti 阅读全文
posted @ 2017-10-07 10:08 rorshach 阅读(746) 评论(0) 推荐(0) 编辑
摘要: php5.3.6X是编译安装,在debug模式下,频繁报出内存泄露警告 php7.1.10下则不会有此错误. 顺便提下:测试发现ThinkPHP也不会有该内存泄露警告! 希望知道如何解决该问题的童鞋能够予以帮助! 阅读全文
posted @ 2017-10-03 10:20 rorshach 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 一.临时同步,重启redis-server后失效 127.0.0.1:6379>slaveof masterIP masterPORT 如果master有密码,同步将失败,需要在redis.conf配置文件中增加 masterauth masterPWD 然后重启redis-server 取消同步 阅读全文
posted @ 2017-09-24 18:16 rorshach 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 一.查看系统中有没有mysql的源 二.配置源 1.配置源参考mysql官方给出的源配置,https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ 新建文件 2.配置key 新建/etc/pki/rpm-gpg/RPM-GPG-KEY-mysq 阅读全文
posted @ 2017-09-21 10:08 rorshach 阅读(147) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 14 下一页