11 2017 档案
摘要:九.缓存 1.缓存三大要素:命中率, 缓存更新策略,缓存最大数据量 2.命中率(mysql为例):mysql提供了一系列的query cache的global status来提现数据库缓存的情况: show global status like '%qcache%'; Qcache_free_blo
阅读全文
摘要:一.基础 1.serialize:序列化一个类,只是保存了类的属性,所以还需要反序列化unserialize的时候包含该类. 2.对于将array转为object,这个转换因为没有具体的类,所以称为了一个孤类: 3.其他语言的多态是向上转型,php的多态没有转型,只是调用了不同的派生类. 4.接口是
阅读全文
摘要:我们有三个类,Db,FileSystem,Session;实际业务需求要组合操作这三个类. 一.常规做法 缺点:Logic内部高度耦合了,Db,FileSystem,Session如果这三个类的初始化条件变化,则需要修改Logic的构造方法. 二.参数依赖(类型提示,将新建关联类的放入调用处) 修改
阅读全文
摘要:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. UML: 示例代码:
阅读全文
摘要:提供了一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 适用场景:当你需要访问一个聚合对象,而这个对象不论是什么,你都需要遍历的时候,就用迭代器. UML: 示例代码:
阅读全文
摘要:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态 UML: 示例代码: 如果只有一个备忘录,可以取消备忘录管理者.
阅读全文
摘要:用一个中介对象来封装一系列的对象交互,中介者使得各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互. 减少了各对象之间的耦合,使得可以独立的改变或复用各个Mediator或ColleagueMediator控制了交互,导致Mediator变的复杂 ps: 各个同事类需要知
阅读全文
摘要:表示一个作用于某对象结构中各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 适用场景:1.适用于元素类数据结构相对稳定(类的方法固定,但属性可以变化,如果方法变化很大,就无法使用访问者)2.把数据的处理从数据结构上分离出来.3.需要一个结构对象角色,组合一系列的元素类.
阅读全文
摘要:将一个请求封装成一个对象,从而可以用不同的请求对象对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作. 与状态模式和责任链模式的区别是,命令模式设定一次,统一执行 使用场景:1.可设计一个队列2.较容易将命令计入日志3.允许接收的一方是决定是否否决请求4.可以实现对请求的撤销和重做5.
阅读全文
摘要:使多个对象都有机会处理处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着该链处理请求,直到有一个对象能够处理它为止. 相当于switch/case,在客户端指定了每一链的下一链. UML 示例代码: 这个手动设置下一处理者,还是有点不方便.有时候设置出错,容易导致死循
阅读全文
摘要:它定义了算法家族,分别封装起来,让他们之间可互相替换,此模式让算法的变化,不会影响到使用算法的客户. UML 示例代码:
阅读全文
摘要:当一个对象内在状态改变时允许改变其行为,这个对象看起来像是改变了其类.状态模式主要解决当控制一个对象状态转换条件表达式过于复杂时的情况,把状态判断逻辑移到表示不同状态的一系列类中.如果状态判断很简单,就没有必要用这个模式了. 1.相当于面向过程中的if/else,状态模式在每个独立的状态类中实现判断
阅读全文
摘要:定义了一种一对多的依赖关系,多个观察者对象同时监听某一主题的变化,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们可以更新自己. 应用场景:某个实例的变化影响到了其他对象. UML: 示例代码:
阅读全文
摘要:定义一个操作中的算法骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤 应用场景: A.操作步骤稳定,而具体细节延迟到子类. UML: 示例代码: 所有的商品类在用户购买前,都需要给用户显示出最终支付的费用.但有些商品需要纳税,有些商品可能有打折
阅读全文
摘要:运用共享技术有效的支持大量细粒度的对象. 应用场景: A.减少对相同对象的重复创建 UML: 示例代码:如果在工厂中,有用户,我们就直接调用,没有用户,我们就获取.减少对同一uid的user对象的重复创建.
阅读全文
摘要:将对象组合成树形结构以表示整体-部分的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性. UML: 示例代码:透明组合:叶节点和子节点具有相同的接口 示例代码:安全组合:接口中不强制实现增加和删除节点,叶节点不具备该两项功能.
阅读全文
摘要:将抽象的部分与实现的部分分离,使它们都可以独立变化.抽象与实现的分离,指的是抽象类和派生类用来实现自己的对象.实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来,让他们独立变化,减少他们之间的耦合. 合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承.聚合是一种弱拥
阅读全文
摘要:动态的给一个对象添加额外的一些职责,就增加功能而言,比继承更具灵活性. 如果仅有一个ConcreateComponent,也可以让Decorator继承ConcreateComponent来实现装饰功能,尽管这看起来很像适配器.但区别主要是语义上的. 何时使用:1.为已有对象动态添加更能多功能.2.
阅读全文
摘要:为其他对象提供一种代理以控制对这个对象的访问. 使用场合: 1.远程代理:为一个对象在不同的地址空间提供局部代表,隐藏对象存在于不同地址空间的事实.2.虚拟代理:根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象.3.安全代理:用来控制真实对象访问时的权限.4.智能指引:当调用真实
阅读全文
摘要:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 什么时候使用:1,开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。2,维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以
阅读全文
摘要:将一个类的接口转换为用户期望的另外一个接口.适配器使得原本由于接口不兼容而不能一起工作的类可以一起工作 UML: 一.类适配器: 二.对象适配器: 三.接口适配器 要求现有类ExistClass适配接口DemoInterface
阅读全文
摘要:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 应用场景:A.一个无状态的类使用单例,可以节省内存B.全局或配置类(其实这个也是无状态的)C.脚本或程序从运行开始到结束,仅需要一个实例来保证数据或条件的一致性(数据库连接,如user类的积分数据),注意这是在单线程模式下,多线程模式下是要处理
阅读全文
摘要:用原型实例指定创建对象的种类,并且拷贝这些原型创建新的对象.应用场景: A.用new创建对象通常有较为复杂的数据准备或权限准备B.对象较大,拷贝对象可以节省内存 UML图:
阅读全文
摘要:将一个复杂对象的创建与表示分离,使得同样的构建过程可以创建不同的表示. 应用场景: A.创建这个对象通常需要较多的参数,才能完整的表示该对象.B.类的各个组成部分的具体实现类或算法经常面临变化,但将他们组合在一起却相对稳定,提供一种封装机制 将稳定的组合算法于易变的各个组成部分隔离开来.C.不同的创
阅读全文
摘要:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 应用场景: 一系列相互依赖的对象有不同的具体实现。提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合 UML: 代码示例: ps:与工厂方法相比,抽象工厂的接口中包含了所有产品的创建.
阅读全文
摘要:最常用的实例化对象模式,用工厂方法替代了实例化对象. 应用场景:A.一个类的子类经常面临着剧烈变化,但却拥有较稳定的接口,或者说拥有相同的接口.工厂方法定义一个用于创建对象的接口,让子类来决定创建那个对象,将对象的实例化延迟.B.如给定一张图片,生成对应的图片并添加水印.图片格式有png,jpg等,
阅读全文
摘要:一.创建型模式(解决对象的创建) 创建型模式抽象了实例化过程.它们帮助一个系统独立于如何创建/组合和表示它的那些对象.一个类创建模式使用继承改变被实例化的类,一个对象创建型模式将实例化委托给另一个对象. 特点:它们都将关于该系统使用哪些类封装起来.它们都隐藏了这些类的实例是如何被创建和放在一起的.整
阅读全文