随笔分类 -  设计模式

摘要:单例模式有很多种,个人习惯使用如下方式: 阅读全文
posted @ 2018-01-13 20:39 沙中世界 阅读(113) 评论(0) 推荐(0) 编辑
摘要:引用一段经典的话,“武学的最高境界是无招胜有招”,在编程领域,设计模式就可以认为是招数,而真正的内功心法是设计原则; 下面讲述一下编程中应该遵循的基本原则 1、单一职责原则 一个类只负责一种职责,只有这种职责的改变会导致这个类的变更。绕口一点的正统说法:不要存在多于一个原因导致类变更 假如:类T 负 阅读全文
posted @ 2017-03-05 10:43 沙中世界 阅读(2942) 评论(1) 推荐(0) 编辑
摘要:访问者模式是一种行为模式,一般用于封装操作的变化,即对于一组对象(或一个对象)数据结构相对固定,但操作方法上有很多变化,这时候可以使用此设计模式; 角色:抽象的访问者角色,定义访问者针对此组对象需要实现的方法约束; 具体访问者角色,实现抽象访问者的约束 抽象被访问者角色,主要定义需要接受访问者的约束 阅读全文
posted @ 2017-03-05 10:08 沙中世界 阅读(192) 评论(0) 推荐(0) 编辑
摘要:模板方法模式:定义完成一件事情的框架,将一些步骤延迟到子类中(实际上是交由子类去做),使得可以不改变算法结构即可重新定义某些步骤; 角色:抽象类(一个非抽象方法和若干抽象),具体类(继承于抽象类) 优点:使得系统结构组成有层次,有条理;减少代码量,减少不必要的重复代码(抽象类实现的代码不必在每个具体 阅读全文
posted @ 2017-03-02 19:45 沙中世界 阅读(488) 评论(0) 推荐(0) 编辑
摘要:策略模式的重点并不是策略的实现,而是策略的管理的使用! 应用场景:当同一种职责,有不同的实现方式的时候可以使用策略管理; 角色:1、策略抽象类 2、策略的具体实现 3、策略环境(此类的作用在代码中有详细说明) 策略模式是典型的依赖接口编程的实现! 策略模式的优点是将算法的责任和实现分割开来,便于系统 阅读全文
posted @ 2017-02-27 19:35 沙中世界 阅读(235) 评论(0) 推荐(0) 编辑
摘要:状态模式(状态对象模式):将状态和行为绑定起来,允许一个对象内部状态改变的时候,改变其行为! 本质上是将行为封装在状态中。 角色:1、状态行为的抽象 2、实际状态对象 3、状态环境(将状态作为成员变量) 下面看实际代码: 状态行为抽象 /* * Copyright (c) 2017. Xiaomi. 阅读全文
posted @ 2017-02-27 19:09 沙中世界 阅读(269) 评论(0) 推荐(0) 编辑
摘要:观察者模式,用于一对多关系对象之间消息传递。 观察者模式的实现需要以下几种角色: 1、观察者的抽象角色,一般就是一个接口,里面只有一个update方法,由观察者自己去实现当收到消息后的处理 2、观察者角色,实现观察者的抽象 3、主题的抽象角色,一般是一个抽象类 用于将观察者聚拢在一个集合里面,并提供 阅读全文
posted @ 2017-02-24 16:30 沙中世界 阅读(260) 评论(0) 推荐(0) 编辑
摘要:备忘录模式又称快照模式,是行为模式之一; 备忘录模式的应用场景是对某些对象做出了改变之后,又需要恢复到改变之前的状态!常常和命令模式结合使用... 备忘录中的三张角色; 1、原始角色,需要具有创建备忘录和根据备忘录恢复状态的方法 /* * Copyright (c) 2017. Xiaomi.Co. 阅读全文
posted @ 2017-02-24 14:16 沙中世界 阅读(201) 评论(0) 推荐(0) 编辑
摘要:中介者模式一般用于解决多个对象或者多个系统之间相互关联,交互的复杂关系的问题!这种关系一般是网状结构,使用中介者模式,将这种网状结构转换为星型结构,降低各个对象之间的耦合度。 网状结构一般会导致系统复杂,可扩展性差,对象可复用程度降低! 中介者模式的缺点是中介者类比较复杂,而且一旦出问题可能会影响整 阅读全文
posted @ 2017-02-22 10:03 沙中世界 阅读(287) 评论(0) 推荐(0) 编辑
摘要:命令模式:将命令封装成对象(下面示例中的Command对象),实现命令请求和命令执行者的解耦! 应用场景:1、出现一组命令的时候。2、需要实现undo操作的时候。3、命令请求与执行可能不是同步的是,需要实现异步处理;4、命令需要事务控制的时候 角色: receiver执行命令的具体对象,命令的实际执 阅读全文
posted @ 2017-02-21 16:04 沙中世界 阅读(207) 评论(0) 推荐(0) 编辑
摘要:责任链模式是一种行为模式,由许多可以处理同一件事情的对象,组成一个链状结构,每一个对象记录其下一个对象的引用,用于传递请求; 请求在这个链上传递,直到被处理或者是不能处理,返回!tomcat的servlet,Struts的filter都采用了责任链的设计模式。 以领导批复员工请假为例: 项目经理 部 阅读全文
posted @ 2017-02-21 10:19 沙中世界 阅读(204) 评论(0) 推荐(0) 编辑
摘要:享元模式一般是使某个类的一个实例,提供许多虚拟实例的一种实现!Java String类型就实现了享元模式! 享元模式是为数不多的为提升性能而设计的模式! 享元模式的享元对象中的数据区分了内部状态和外部状态 内部状态:在享元对象中,不随外界环境改变而改变的共享部分的数据; 外部状态:在享元对象中,随着 阅读全文
posted @ 2017-02-20 11:41 沙中世界 阅读(247) 评论(0) 推荐(0) 编辑
摘要:一般设计一个复杂的系统的时候,常常将整个系统按照功能划分为几个子系统;这样便于开发,也便于形成比较清晰的架构。 但对于使用者来说,如果需要了解各个系统的功能,则不是一件很简单的事情!这时候提供一个了解各个子系统功能的门面角色,用户只需要和门面角色交流即可! 例如:电脑开机这件事情,可能需要首先启动C 阅读全文
posted @ 2017-02-20 11:06 沙中世界 阅读(273) 评论(0) 推荐(0) 编辑
摘要:组合模式的一般定义:将对象组合成树形结构,表示整体!对于使用者来说,单个对象和整体是一致的。 组合模式一般在树形结构(层次结构)中应用较多,例如:菜单结构,文件夹结构;一般情况下是整体与单个对象具有很大的相似性; 使用组合模式实现菜单管理: 首先定义菜单的抽象类: /* * Copyright (c 阅读全文
posted @ 2017-02-15 16:39 沙中世界 阅读(236) 评论(0) 推荐(0) 编辑
摘要:代理模式应用场景一般是控制对象的访问权限,有时用于为对象增加功能。 与装饰模式的区别是,装饰模式增加的功能一般是特殊功能,而代理模式增加的功能是通用功能;同时,在实现上,一般代理模式中,被代理对象是在代理对象中创建的,而装饰模式中被装饰对象是通过构造函数从外部传入到装饰者中的。 装饰模式一般使用抽象 阅读全文
posted @ 2017-02-13 16:53 沙中世界 阅读(193) 评论(0) 推荐(0) 编辑
摘要:装饰模式:为对象增加额外的功能。 这么说来可能比较难以理解,举个例子:不同的工厂组装不同的手机,都需要安装CPU、主板、听筒、屏幕这几个部分! A厂除了安装上述部分外,还可能需要安装摄像头; B厂除了安装上述部分外,还可能需要安装距离传感器; 1、首先我们先建立一个组装手机的接口 /* * Copy 阅读全文
posted @ 2017-02-09 10:39 沙中世界 阅读(158) 评论(0) 推荐(0) 编辑
摘要:桥接模式属于结构型模式,主要用于某一个类,需要体现两个维度上的特征!例如一碗面条的味道可能需要蔬菜和肉的类型两个维度描述(海带鸡丝面,酸菜牛肉面等),并且每一个维度不能使用基本类型的变量描述,需要使用类描述。 桥接模式一般是由接口 + 抽象类 + 实现类描述的! 接口描述一个维度,抽象类描述另一个维 阅读全文
posted @ 2017-02-07 11:49 沙中世界 阅读(251) 评论(0) 推荐(0) 编辑
摘要:适配器模式一般是在系统改造,更新时,原有的接口与新的接口需求不匹配的情况下,使用适配器模式比较快速的解决此问题。 适配器模式的另一个优点是代码的复用,某些场景下,代码基本上可以复用,但需要稍作变动时,可以使用适配器模式来实现代码的复用。 一般来说,过多的使用适配器会使得系统比较杂乱,所以如果时间允许 阅读全文
posted @ 2017-02-06 14:19 沙中世界 阅读(200) 评论(0) 推荐(0) 编辑
摘要:原型模式的优点:简化对象的创建,使得创建对象就像复制粘贴一样easy。 使用原型模式创建对象,一般不会调用类的构造方法,Object的clone方法是一个本地方法,直接操作内存中的二进制流,在复制大对象时,性能差别非常明显。 关于深拷贝与浅拷贝 浅拷贝 - 拷贝的是值类型以及引用类型的地址 深拷贝 阅读全文
posted @ 2017-02-06 10:55 沙中世界 阅读(249) 评论(0) 推荐(0) 编辑
摘要:前面讲述了工厂模式,主要用于创建对象;建造者模式与工厂模式的相同之处在于都属于创建型的设计模式,即都是为解决方便创建对象而产生的设计模式! 不同之处在于,工厂模式一般用于创建产品本身较为简单,但是产品种类比较多,产品分类较复杂的场景;建造者模式一般用于创建产品本身比较复杂,但是不同产品的创建都需要遵 阅读全文
posted @ 2017-02-04 17:55 沙中世界 阅读(210) 评论(0) 推荐(0) 编辑