设计模式
文章平均质量分 78
yfyh2021
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式之观察者模式
模式定义 定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖者都会收到通知并更新 应用场景 当更改一个对象的状态可能需要更改其他对象,并且实际的对象集事先未知或动态更改时,请使用观察者模式。 优点 1.符合开闭原则 2.可以在运行时建立对象之间的关系 示例: public class ObserverTest { public static void main(String[] args) { Subject subj原创 2021-10-18 14:45:55 · 119 阅读 · 0 评论 -
设计模式之模板方法模式
模式定义 定义一个操作的算法骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 应用场景 1.当你想让客户端只扩展算法的特定步骤,而不是整个算法或其结构时,请使用Template Method模式。 2.当你有几个类包含几乎相同的算法,但有一些细微的差异时,请使用此模式。 优点 1.你可以让客户端只覆盖大型算法的某些部分,从而减少算法其他部分发生的更改对它们的影响。 2.你可以将重复的代码拖放到超类中。 举例: publ原创 2021-10-18 14:18:52 · 266 阅读 · 0 评论 -
设计模式之策略模式
模式定义 定义了算法族,分别封装起来,让它们之间可以互相替换,此模式的变化独立于算法的使用者。 优点 1.可以将算法的实现细节与使用它的代码隔离开来。 2.符合开闭原则 应用场景 1.当你有很多类似的类,但它们执行某些行为的方式不同时,请使用此策略。 2.使用该模式将类的业务逻辑与算法的实现细节隔离开来,这些算法在逻辑上下文中可能不那么重要。 3.当你的类具有大量的条件运算符,并且在同一算法的不同变体之间切换时,请使用此模式。 举例: 比如说我们开发一个植物大战僵尸,最开始只有普通僵尸和旗手僵尸原创 2021-10-18 11:50:36 · 149 阅读 · 0 评论 -
设计模式之装饰者模式
模式定义 在不改变原有对象的基础上,将功能附加到对象上 应用场景 扩展一个类的功能或给一个类添加附加职责 优点 1.不改变原有对象的情况下给一个对象扩展功能 2.使用不同的组合可以实现不同的效果 3.符合开闭原则 示例:我们创建一个拍照接口进行实现,实现后我们需要新加一个美颜效果 public class DecoratorTest { public static void main(String[] args) { Component component = new原创 2021-10-12 17:23:03 · 94 阅读 · 0 评论 -
设计模式之适配器模式
模式定义 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 应用场景 1.当你希望使用某些现有类,但其接口与您的其他代码不兼容时,请使用适配器类。 2.当你希望重用几个现有的子类,这些子类缺少一些不能添加到超类中的公共功能时,请使用该模式。 优点 1.符合单一职责原则 2.符合开闭原则 对象适配器模式 public class AdapterTest1 { public static void main(String[原创 2021-10-12 16:04:26 · 114 阅读 · 0 评论 -
设计模式之享元模式
模式定义 运用共享技术有效地支持大量细粒度的对象 优点 如果系统有大量类似的对象,可以节省大量的内存及CPU资源 举例 比如说坦克大战小游戏中的墙或者草丛,每一个墙或者草丛都是一样的,如果我们大量创建对象的话内存占用不可想想。这时候就可以用到享元模式。 首先,我们来定义墙或者树, class Tree{ private final String name; private final String data; public Tree(String name, String原创 2021-10-12 15:08:25 · 114 阅读 · 0 评论 -
设计模式之原型模式(浅拷贝与深拷贝)
模式定义 指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 知识点 1.Cloneable接口/Object#clone方法详解 2.浅拷贝/深拷贝 3.序列化机制实现深拷贝 应用场景 当代码不应该依赖于需要复制的对象的具体类时,请使用Prototype模式。 有点 1.可以不耦合具体类的情况下克隆对象 2.避免重复的初始化代码 3.更方便的构建复杂对象 示例: 我们有一个类Product class Product{ private String part1; .原创 2021-10-12 11:04:41 · 360 阅读 · 0 评论 -
设计模式之建造者模式
模式定义 将一个复杂对象的创建与他的表示分离,使得同样的构建过程可以创建不同的表示 应用场景 1.需要生成的对象具有复杂的内部结构 2.需要生成的对象内部属性本身相互依赖 3.与不可变对象配合使用 优点 1、建造者独立,易扩展。 2、便于控制细节风险。 示例: public class BuilderTest { public static void main(String[] args) { } } interface ProductBuilder{ void bui原创 2021-10-11 16:20:34 · 95 阅读 · 0 评论 -
设计模式之抽象工厂模式
模式定义 提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类(其实就是一系列工厂模式集合到一起) 应用场景 程序需要处理不同系列的相关产品,但是您不希望它依赖于这些产品的具体类时,可以使用抽象工厂 优点 1.可以确信你从工厂得到的产品彼此是兼容的。 2.可以避免具体产品和客户端代码之间的紧密耦合。 3.符合单一职责原则 4.符合开闭原则 示例 package com.yang.abstractFactory; /** * @description: * @author: Bry原创 2021-10-11 11:21:54 · 80 阅读 · 0 评论 -
设计模式之工厂模式
模式定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使得一个类的实例化延迟到子类。 应用场景 当你不知道改使用对象的确切类型的时候 当你希望为库或框架提供扩展其内部组件的方法时 主要优点 将具体产品和创建者解耦 符合单一职责原则 符合开闭原则 interface Product{ public void method1(); } //具体实现 class ProductA implements Prod...原创 2021-10-10 17:25:12 · 92 阅读 · 0 评论 -
设计模式之单例模式
模式定义: 保证一个类只有一个实例,并且提供一个全局访问点 场景: 重量级的对象,不需要多个实例,如线程池,数据库连接池。 1.懒汉模式 延迟加载, 只有在真正使用的时候,才开始实例化。 基本实现: public class LazySingletonTest { public static void main(String[] args) { LazySingleton instance1 = LazySi...原创 2021-10-10 16:11:30 · 109 阅读 · 0 评论
分享