Honson Blog

一生想做浪漫极客

饿汉式单例模式

设计模式之单例模式

设计模式之饿汉式单例模式 懒汉式的单例比较简单,注重的是在类加载的时候就完成初始化,不用考虑类的同步问题,这个有个问题就是在类加载的时候就完成初始化,如果这个类在整个项目中都没有被使用也依旧会被初始化,这样就不能起到节省内存消耗的作用了。 这个实现起来非常简单,我们不做过多的讲解,我们看一下实现 public class HungrySingleton { private fin...

工厂方法模式

设计模式之工厂模式

工厂方法 定义 创建一个对象的接口(抽象类),但是让实现(继承)这个接口(抽象类)的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。 类型 创建型 适用场景 创建对象需要大量的重复代码 客户端(应用层)不依赖于产品实例如何被创建,实现等细节。 一个类通过其子类来指定创建哪个对象。 创建对象会产生大量的重复代码,工厂方法通过创建一个方法来交由子类创建对象。 ...

迪米特法则

软件开发原则之迪米特法则

迪米特法则 定义 一个对象应该对其他对象保持最少的了解。又叫最少知道原则。 尽量降低类之间的耦合。 主要强调降低耦合,优点也是降低耦合。 强调朋友交流,不和陌生人讲话。 所谓朋友: 出现在成员变量、方法的输入、输出参数中的类成为成员朋友类,而在方法体内部的类不属于朋友类。下面看代码 假设我们要实现一个需求校长下令给老师想知道班级有多少课。 新建一个校长类,有一个下命令方法。...

装饰者模式

设计模式之装饰者模式

装饰者模式 定义 在不改变原有对象的基础之上,将功能附加到对象上。提供了比继承更有弹性的替代方案(扩展原有对象功能) 类型 结构型 适用场景 扩展一个类的功能或者给一个类添加附加职责 给一个对象动态的添加功能,或动态撤销功能。 优点 继承的有力补充,比继承灵活,不改变原有对象的情况下给一个对象扩展功能。(继承在扩展功能是静态的,必须在编译时就确定好,而使用装饰者可以在运行...

建造者模式

设计模式之建造者模式

建造者模式 定义 讲一个复杂的对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。 用户只需指定需要建造的类型就可以得到他们,建造过程及其细节不需要知道 类型 创建型 适用场景 如果一个对象有非常复杂的内部结构(很多属性) 想把复杂对象的创建和使用分离 优点 封装性好,创建和使用分离 拓展性好、建造类之间独立...

适配器模式

设计模式之适配器模式

适配器模式 定义 将一个接口转换成客户期望的另一个接口。这里的接口可以指一个接口也可以是一个类,一个方法。 使本来接口不兼容的类可以一起工作。 类型 结构型 使用场景 已经存在的类,他的方法和需求不匹配时(方法结果相同或相似) 适配器模式不是软件设计阶段考虑的设计模式,是随着软件维护不同的产品、不同厂家造成的功能相似接口不同的情况下的解决方案。 优点 能提高...

组合模式

设计模式之组合模式

组合模式 定义 将对象组合成树形结构以表示“部分-整体”的层次结构。 组合模式是客户端对单个对象和组合对象保持一致的方式处理。 类型 结构型 适用场景 希望客户端可以忽略组合对象与单个对象的差异是 处理一个树形结构时 优点 清楚地定义分层次的复杂对象,表示对象的全部或部分层次。 让客户端忽略了层次的差异...

序列化和反序列化对单例破坏

设计模式之原型模式

首先我们来看一下序列化和反序列化是怎么破坏单例的。看代码 public class HungrySingleton implements Serializable{ private final static HungrySingleton hungrySingleton; static{ hungrySingleton = new HungrySingl...

容器单例

设计模式之单例模式

容器单例 我们先看代码吧 public class ContainerSingleton { private ContainerSingleton(){ } private static Map<String,Object> singletonMap = new HashMap<String,Object>(); public s...

外观模式

设计模式之外观模式

外观模式 定义 又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口。定义了一个高层接口,让子系统更容易使用。 类型 结构型 使用场景 子系统越来越复杂,增加外观模式提供的简单调用接口 构建多层系统结构,利用外观对象作为每层的入口,简化层间调用。 优点 简化了调用过程,无需了解深入子系统,防止来风险。 减少系统的依赖、松散耦合 更好的划分访问层次...