
Java设计模式
文章平均质量分 59
Java设计模式
330553352
这个作者很懒,什么都没留下…
展开
-
单例设计模式
单例设计模式一、类加载与static1.1. 类加载顺序1.2. static关键字二、 单例设计模式2.1. 饿汉式(可用)2.2. 普通懒汉式(线程不安全,不可用)2.4. 双重检查懒汉式(可用,推荐)2.5. 静态内部类(可用,推荐,线程安全)2.6. 枚举(可用,推荐) 一、类加载与static 1.1. 类加载顺序 先执行父类的静态代码块和静态变量初始化,静态代码块和静态变量的执行顺序跟代码中出现的顺序有关。 执行子类的静态代码块和静态变量初始化。 执行父类的实例变量初始化 执行父类的构造函数原创 2021-03-21 18:34:39 · 186 阅读 · 0 评论 -
合成复用原则
合成复用原则 合成复用原则:是指尽量使用对象组合(has-a)/聚合(contanis-a)而不是继承关系达到软件复用的目的。可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少。 继承叫作白箱复用,相当于把所有的实现细节暴露给子类。组合/聚合称为黑箱复用,我们是无法获取到类以外的对象的实现细节的。虽然我们要根据具体的业务场景来做代码设计,但也需要遵循OOP模型。以数据库操作为例,先来创建DBConnection类: public abstract class DBConnec原创 2020-09-19 14:56:20 · 357 阅读 · 0 评论 -
迪米特原则
迪米特原则 迪米特原则:是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则,尽量降低类与类之间的耦合度。迪米特原则主要强调:只和朋友交流,不和陌生人说话。出现在成员变更、方法的输入、输出参数中的类都可以称为成员朋友类,而出现在方法体内部的类不属于朋友类。 现在来设计一个权限系统,Boss需要查看目前发布到线上的课程数量。这时候Boss要找到TeamLeader去进行统计。TeamLeader再把统计结果告诉Boss。接下来我们还是来看代码: 根据迪米特原则,Boss只想要结果,不需要跟Course原创 2020-09-19 14:21:08 · 1237 阅读 · 1 评论 -
接口隔离原则
接口隔离原则 接口隔离原则:是指用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口。 设计接口时应该注意以下几点: 一个类对另一个类的依赖应该建立在最小的接口之上 建立单一接口,不需建立庞大臃肿的接口 尽量细化接口,接口中的方法尽量少(不是越少越好,一定要适度) 下面我们来看一段代码,对一个动物行为进行抽象描述: IEatAnimal接口的代码如下: public interface IEatAnimal { void eat(); } IFlyAnimal接口的代码如下:原创 2020-09-19 14:03:38 · 196 阅读 · 0 评论 -
单一职责原则
功能职责单一原则 错误代码示例: Course 类承担了两种处理逻辑。假如现在要对课程进行加密,直播课程和录播课程的加密逻辑不一样,必须修改代码。而修改代码的逻辑势必会相互影响,容易带来不可控的风险。 public class Course { public void study(String courseName){ if("直播课".equals(courseName)){ System.out.println(courseName + "不能快进");原创 2020-09-14 22:14:48 · 140 阅读 · 0 评论 -
依赖倒置原则
依赖倒置原则 依赖倒置原则是指设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性,并且能够降低修改程序所造成的风险。 创建一个课程的抽象ICourse接口: public interface ICourse { void study(); } 编写JavaCourse类: public class JavaCourse implements ICourse {原创 2020-09-14 21:40:17 · 216 阅读 · 1 评论 -
开闭原则
开闭原则 开闭原则是指一个软件实体(如类,模块和函数)应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。它强调的是用抽象构建框架,用实现扩展细节,可以提高软件系统的可复用性及可维护性。开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定、灵活的系统。例如版本更新,我们尽可能不修改源代码,但是可以增加新功能。 以学院课程体系为例,首先创建一个课程接口 ICourse: public interface ICourse { Integer getId();原创 2020-08-19 14:09:21 · 159 阅读 · 0 评论 -
依赖注入
面向接口编程 依赖注入是面向接口编程的一种体现,是Spring的核心思想。 事实上依赖注入并不是什么高深的技术, 只是被Sping这么以包装就显得有些神秘。 class Main { interface Language { void print(String s); } static class Java implements Language{ ...原创 2019-11-30 11:04:18 · 298 阅读 · 0 评论 -
Build模式
一、简介 Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来,两者之间的耦合度也降到最低。 二、使用场景 初始化一个对象,并且这个对象有非常复杂的参数设置,如下所示: public class Swagger2 { @Bean ...原创 2019-11-19 22:26:20 · 189 阅读 · 0 评论 -
代理模式
一、什么是代理模式 简单说即是在不改变源码的情况下,实现对目标对象的功能扩展。 二、动态代理 2.1、被代理的接口 public interface Demo { void test1(); void test2(); } 2.2、被代理的对象(实现了被代理接口的对象) public class DemoImpl implements Demo { @Overri...原创 2019-10-20 15:47:18 · 112 阅读 · 0 评论 -
工厂设计模式
抽象工厂模式 一、定义 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式,是工厂方法模式的升级版,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。 抽象工厂模式包含了几个角色: AbstractFactory:用于声明生成抽象产品的方法 ConcreteFactory:实现了抽象...原创 2019-10-03 15:46:01 · 149 阅读 · 0 评论 -
外观模式
外观模式 一、定义 提供了一个统一的接口,用来访问子系统中的一群接口。(定义了一个高层接口,让子系统更容易使用。) 二、适用场景 子系统越来越复杂,增加外观模式提供简单调用接口。 构建多层系统结构,利用外观对象作为每层的入口,简化层间调用。 三、优点 简化了调用过程,无需了解深入子系统,防止带来风险。 减少系统依赖,松散耦合。 更好的划分访问层次。 符合迪米特法则。 四、缺点 增加子系统...原创 2019-10-02 14:18:40 · 164 阅读 · 0 评论