随笔分类 -  设计模式和代码规范

摘要:访问者模式定义如下:封装一些作用于某种数据结构中各个元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 下面看一下几个抽象角色: Visitor抽象访问者:抽象类或接口,定义访问者可以访问哪些元素。 ConcreateVisitor具体访问者:它影响访问者访问到一个类之后该怎么 阅读全文
posted @ 2018-10-08 23:20 行者林 阅读(215) 评论(0) 推荐(0)
摘要:在画类图的时候,理清类和类之间的关系是重点。类的关系有泛化(Generalization)、实现(Realization)、依赖(Dependency)和关联(Association)。其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition)。下面我们结合实 阅读全文
posted @ 2018-10-08 20:48 行者林 阅读(2183) 评论(0) 推荐(0)
摘要:桥梁模式也叫桥接模式,其定义如下:将抽象和实现解耦,使得两者可以独立变化。它的重点在“解耦”上面。 它有一下四个角色: Abstraction抽象角色:它的职责是定义该角色的行为,同时保存对一个实现化角色的引用,该角色一般是一个抽象类。 Implementor实现化角色:它是接口或抽象类,定义角色所 阅读全文
posted @ 2018-10-04 21:30 行者林 阅读(279) 评论(0) 推荐(0)
摘要:门面模式,也叫外观模式,是一种比较常用的封装模式,定义如下:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,门面模式提供了一个高层次的接口,使得子系统更易于使用。门面对象是通往外界子系统内部的唯一通道,我们先明确下门面模式的角色: Facade门面角色:客户端可以调用这个角色的方法,此 阅读全文
posted @ 2018-10-03 21:26 行者林 阅读(435) 评论(0) 推荐(0)
摘要:观察者模式也叫发布/订阅模式,其定义如下:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。 我们先看看观察者模式的几个角色: Subject被观察者:定义被观察者必须实现的职责,它必须能够动态的增加、取消观察者,它一般是抽象类或实现类,仅仅完成 阅读全文
posted @ 2018-10-03 16:54 行者林 阅读(173) 评论(0) 推荐(0)
摘要:组合模式又叫合成模式,有时又叫整体-部分模式,主要用来描述整体和部分的关系,其定义为:将对象组合成树形结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 先说说组合模式的几个角色: Component抽象构件角色:定义参加组合对象的共有方法和属性,也可以定义一些默认的 阅读全文
posted @ 2018-10-03 10:10 行者林 阅读(127) 评论(0) 推荐(0)
摘要:适配器模式的定义如下:将一个类的接口变换为客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式又叫变压器模式、包装器模式。 适配器通常包含三个角色: Target目标角色:该角色定义需要转换为哪个目标角色,也就是期望接口。 Adaptee源角色:你想把谁 阅读全文
posted @ 2018-10-02 16:36 行者林 阅读(136) 评论(0) 推荐(0)
摘要:这是一种比较常见的模式,定义如下:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。 装饰模式有四个基本角色: Component抽象构件 Component是一个接口或者是抽象类,就是定义最核心的对象,也就是最原始的对象。 ConcreateComponent具体构件 阅读全文
posted @ 2018-10-01 23:13 行者林 阅读(116) 评论(0) 推荐(0)
摘要:定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。使这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。 责任链的重点在于“链”上,由一条链去处理相似的请求在链中决定谁来处理这个请求,并返回相应结果。“链”由多个处理器ConcreateHandler组成,下 阅读全文
posted @ 2018-09-28 23:10 行者林 阅读(205) 评论(0) 推荐(0)
摘要:命令模式是一种高内聚的模式,定义为:将一个请求封装为一个对象,从而使不同的请求把客户端参数化,将请求排队或记录请求日志,可以提供命令的撤销和恢复功能。 命令模式通常有三个角色: Receiver接收者角色。接收到命令后执行具体任务 Command命令角色。需要执行的所有命令都在这里定义 Invoke 阅读全文
posted @ 2018-09-27 22:44 行者林 阅读(161) 评论(0) 推荐(0)
摘要:定义:为其他对象提供一种代理以控制对这个对象的访问。代理模式本质上也叫做委托模式,它是一种基本设计技巧,许多其他模式,比如状态模式,策略模式,访问者模式本质上是在特殊场合采用了委托模式。代理模式应用非常广泛,下面举出一个通用示例,假设现有三个角色,抽象主题、具体实现主题、代理主题: 代理模式有如下优 阅读全文
posted @ 2018-09-24 22:27 行者林 阅读(124) 评论(0) 推荐(0)
摘要:也叫做生成器模式,其定义如下:讲一个复杂的对象构建与他的表示分离,使得同样的创建过程可以创建不同的表示。 在建造者模式中,有四个角色: Product产品模型类 通常是实现了模板方法,也就是有模板方法和基本方法。 Builder抽象建造类 产品的组建,一般由子类实现。 ConcreateBuilde 阅读全文
posted @ 2018-09-21 23:24 行者林 阅读(253) 评论(0) 推荐(0)
摘要:定义:定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。 模板方法模式比较简单,仅仅使用了java的继承机制,但仍然是一种应用广泛的设计模式。下面看一段通用示例代码: 注意:抽象模板中的基本方法尽量设计为protected类型,符合 阅读全文
posted @ 2018-09-20 21:43 行者林 阅读(142) 评论(0) 推荐(0)
摘要:定义:创建一组相关或相互依赖的对象提供一个接口,并且无须指定他们的具体类。抽象工厂模式是工厂模式的升级版本,当有多个业务品种和业务分类时,通过抽象工厂模式产生需要的对象是一个很好的解决方式。有N个产品族,在抽象工厂类中就应该有N个创建方法。 首先假设有两个互相影响的产品族,比如汽车的左侧门和右侧门, 阅读全文
posted @ 2018-09-20 00:36 行者林 阅读(103) 评论(0) 推荐(0)
摘要:定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。 一个通用栗子如下: 上述只是一个简单示例,根据需要可自由扩展,工厂模式有以下优点: 具有良好封装性,代码结构清晰。只要给定一个类名或约束字符串就可以得到一个具体对象,封装了复杂的创建过程,降低了耦合性 阅读全文
posted @ 2018-09-19 23:23 行者林 阅读(129) 评论(0) 推荐(0)
摘要:单例类,通过使用private的构造函数确保一个应用中只产生一个实例,并且是自行实例化。通用代码如下: 单例模式的优缺点: 由于单例在内存中只有一个实例,减少内存开支,特别是对象需要频繁创建和销毁时; 当单例模式只产生一个对象,当对象的产生需要较多资源,比如读取配置文件、产生其他依赖对象时,可以使用 阅读全文
posted @ 2018-09-18 22:14 行者林 阅读(175) 评论(0) 推荐(0)
摘要:单个类保持功能尽量单一,如果组合了多个功能,需要抽象出多个接口,对外提供单一视图。 这样做的好处很多,包括: 类的复杂度降低,实现什么职责都有了清晰的定义,因此也提高了可读性 可维护性提高,更易于扩展 变更风险小,如果接口的单一职责明确,修改接口只会对实现类产生影响,而不会影响其他接口 面向对象中, 阅读全文
posted @ 2018-09-16 23:18 行者林 阅读(146) 评论(0) 推荐(0)
摘要:不要在新代码中使用原生态类型 原生态类型就是简单的“<>”,没有任何参数类型限定,和没有使用泛型一样,之所以存在无非是为了保持前向兼容性,因为没有起到泛型应有的作用,所有不建议使用。 不要忽视非受检警告,并接受它 每一条受检警告都可能抛出类型转换异常,只有在明确知道不会有转换异常的时候,才可以用@S 阅读全文
posted @ 2018-09-14 00:07 行者林 阅读(145) 评论(0) 推荐(0)