1 GOF设计原则
1.1对接口编程而不是对实现编程
面向接口编程:不需要知道特定的实现类,低耦合。
1.2 优先使用对象组合而不是继承
继承是is-a,组合是has-a.
2设计模式类型
2.1创建型模式
2.1.1 工厂模式
-
工厂模式(Factory Pattern)是 Java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
-
实现方式 :创建接口,创建实现类,创建工厂,获取对象。具体实现参考菜鸟教程
-工厂模式
自己感悟:提供一个公开的方法去创建对象,隐藏了创建对象的细节。比如spring的工厂,通过getbean方法获取实例对象,隐藏了内部实现的细节。 -
探讨spring FactoryBean细节 :提供了用户自己定义工厂的方法。只需要实现getObjectType,getObject,isSingleton.再将其配置到spring中,依赖该工厂的属性会自动调用getObject方法。
2.1.2 抽象工厂模式
- 抽象工厂模式(Abstract FactoryPattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
- 抽象工厂定义工厂主要完成的内容,具体实现由单个简单工厂类进行实现。比如:戴尔只生产主机和鼠标,即抽象工厂定义获取主机和鼠标的抽象方法,然后归定由两个工厂去实现,一个生产主机一个生产鼠标,这两个工厂集成抽象工厂,分别实现自己要实现的方法。然后在创建一个工厂创造器,供外部调用获取实例工厂。通过这种方式能够保证整套产品都属于一个工厂。对比2.1.1简单的工厂模式,它只实现一种对象的创建,而抽象工厂则规定了一系列对象的创建,具体实现由简单的工厂实现。
2.1.3 单例模式
- 单例模式(Singleton Pattern)是 Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
2.1.4 建造者模式
- 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。
- 实际:将一个复杂的构建过程与其表示相分离,即是一步一步的建造过程.
2.1.5 原型模式
- 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用
- 实际就是当初始化一个类需要耗费很大的代价,我们可以把这个需要共用的状态先保存起来,然后当在需要时通过返回这个对象的克隆进行操作。这样能够节省一些耗时的初始化工作。