java设计模式代码库
- 饿汉式,线程安全
- 懒汉式,不加锁,线程不安全
- 懒汉式,加锁,线程安全,效率低
- 双重检查 线程安全,效率高
- 静态内部类
- 枚举
单例模式的优点:
- 保证系统中只有一个实例,避免资源浪费
- 维护系统中唯一的一份状态,避免多个实例之间逻辑上的错误或者不一致性问题
- 一定程度上提高系统的性能表现
单例模式的缺点:
- 单例模式会使得代码复杂度增加,降低代码可维护性
- 单例模式的单例对象在整个程序运行期间都不会被销毁,可能导致资源长时间不能得到释放,从而降低整体性能表现
- 滥用单例模式可能会导致系统出现全局性的复杂性和耦合性问题
如何实现简单工厂,以及应用场景、优缺点等
- 使用if/else 或者switch/cash 来获取对象
- 应用场景:简单工厂模式适用于需要创建的对象类型少,且客户端只需要告诉工厂要什么类型的对象即可,不需要知道具体的实现类名,帮助客户端更好地管理多个具体产品的实现。、
- 优缺点:
- 简单工厂模式的优点是能够隐藏创建对象的过程,客户端只需传入需要的参数即可获取所需对象,同时可以降低客户端与具体实现类之间的耦合。
- 缺点是工厂类集中了所有产品的生产逻辑,管理和维护困难,新增产品时需要修改工厂类的代码,不符合开闭原则。
如何实现工厂方法,以及应用场景、优缺点等
- (工业制度标准化)在简单工厂的基础上,将创建的对象进行拆分,实现不同对象不同的工厂
- 应用场景:工厂方法模式适用于需要创建多种具体实现类的产品类,通过定义一个工厂接口和相应的工厂实现类来帮助客户端管理多个具体类的实现,同时也能够降低系统耦合度,增加代码的可扩展性和可维护性。因此,当客户端需要创建多个相关产品类的实例时,且客户端希望能够灵活地添加新的产品实现类时,可以使用工厂方法模式。
- 优缺点:
- 优点:封装对象的创建过程,符合单一职责原则;能够很容易地添加新的产品实现,符合开闭原则。
- 缺点:类的个数容易过多,增加代码结构的复杂性;不能保证返回的对象类型与客户端期望的类型一致。
如何实现抽象工厂,以及应用场景、优缺点等
- 抽象工厂是普通工厂和工厂方法的升级,是随着产业规模变大,种类变多后的规划升级。需要对产品进行分门别类,对类型创建不同的工厂去生产产品。
- 应用场景:抽象工厂适用于创建具有共同特征或相互配合应用的多个对象的场景,适用于需要创建一系列相关或独立的对象,并统一管理它们的创建过程。
- 优缺点:
- 优点:能够实现客户端代码与具体工厂实现解耦,同时保证所创建的对象是互相匹配并且在同一工厂创建的。
- 缺点:扩展新的产品族比较麻烦,需要修改抽象工厂接口并实现新的具体工厂类。