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