java中的23种设计模式
大城市里的小麻雀
这个作者很懒,什么都没留下…
展开
-
外观模式
一,什么是外观模式?是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性,类似于系统的网关。二:外观模式中的角色?外观(Facade)角色:为多个子系统对外提供一个共同的接口。子系统(Sub System)角色:实现系统的部分功能,客户可...原创 2020-04-23 17:34:03 · 96 阅读 · 0 评论 -
观察者模式
一:什么是观察者模式?指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。二:观察者模式中主要的角色1)抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。2)具体主题(Con...原创 2020-04-23 16:02:53 · 101 阅读 · 0 评论 -
策略模式
策略模式是将对象的行为分离出来,抽象成为一个接口。模拟一个场景:假设一共有三种方式供游客选择出行,分别为火车、高铁、飞机,不同的游客可以选择不同的出行方式。抽象策略类(TravelStrategy):策略的抽象,对某一种方式进行抽象具体策略类操作具体策略的客户端测试类:不同的用户可以选择不同的出行方式选择策略模式避免了使用if-else的判断,降低了代码间的耦合性。...原创 2020-03-16 13:43:44 · 71 阅读 · 0 评论 -
适配器模式
将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作适配器模式分为:类适配器、对象适配器、接口适配器类适配器模式的代码如下:Target:给手机充电目标类Adaptee:被适配者,交流电压220vAdapter:适配器,将220v的交流电压转为5v测试类:类图如下:对象适配器模式的代码如下:Target:给手机充电目标类Adaptee:被适配者,交...原创 2020-03-15 19:46:57 · 116 阅读 · 0 评论 -
建造者模式在 StringBuilder 源码中的应用
StringBuilder源码发现:StringBuilder继承了 AbstractStringBuilderAbstractStringBuilder 实现了一个 Appendable 接口Appendable 接口定义了多个 append 方法(抽象方法),即 Appendable 为抽象建造者,定义了抽象方法AbstractStringBuilder 实现了 Appendabl...原创 2020-03-15 14:54:24 · 148 阅读 · 0 评论 -
建造者模式
Product类:要建造的具体产品(假设该产品由三个部分组成)Builder:抽象建造者ConcreteBuilder:具体建造者抽象建造者与具体建造者【抽象建造者类中定义了产品的创建方法和返回方法;具体建造者类实现了抽象建造者类的抽象接口,构建和装配各个部件】Director指挥者:可通过指挥者类调用建造者的相关方法,返回一个完整的产品对象测试类:执行结果:通过代码我们能...原创 2020-03-15 13:59:59 · 118 阅读 · 0 评论 -
Java中的深浅拷贝问题
浅拷贝:1,对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。2,对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。因为实际上两个对...原创 2020-03-15 11:29:56 · 257 阅读 · 0 评论 -
原型模式在JDK源码中的应用
spring 提供了5种scope分别是singleton, prototype, request, session,global session。如果一个bean被声明为单例的时候,在处理多次请求的时候在spring 容器里只实例化出一个bean,后续的请求都公用这个对象,这个对象会保存在一个map里面。当有请求来的时候会先从缓存(map)里查看有没有,有的话直接使用这个对象,没有的话才实例化...原创 2020-03-14 14:23:14 · 657 阅读 · 0 评论 -
原型模式
原型模式(Prototype Pattern)用于创建重复的对象,同时又能保证性能,即利用已有的一个原型对象,快速地生成和原型对象一样的实例。解决方法:实现克隆操作,实现Cloneable接口,重写clone()方法。例如,有一只多利羊,需要创建两个同样的实例:注意: 省去带参构造器,set和get方法及toString()方法测试结果:...原创 2020-03-14 13:41:40 · 78 阅读 · 0 评论 -
工厂模式在JDK源码中的应用
当我们创建对象实例的时候,不要直接new对象,而是把这个new对象的动作放在一个工厂的方法中。工厂模式分为:简单工厂模式、工厂方法模式、抽象工厂模式在JDK源码中 ,java.util.Calendar使用了工厂模式的简单工厂模式源码如下:...原创 2020-03-14 12:57:59 · 871 阅读 · 0 评论 -
抽象工厂模式
此模式是对工厂方法模式的进一步扩展。在工厂方法模式中,一个具体的工厂负责生产一类具体的产品,即一对一的关系,但是,如果需要一个具体的工厂生产多种产品对象,那么就需要用到抽象工厂模式了。模拟一个场景,苹果工厂不仅生产苹果手机还要生产苹果PCPhone类:标准手机类Apple类:制作苹果手机HuaWei类:制作华为手机PC类:标准PC类ApplePC类:制作苹果PCHuaWei...原创 2020-03-14 12:16:54 · 106 阅读 · 0 评论 -
工厂方法模式
和简单工厂模式中工厂负责生产所有产品相比,工厂方法模式将生成具体产品的任务分发给具体的产品工厂模拟一个场景:不同的手机工厂生产不同的手机Phone类:标准手机类Apple类:制作苹果手机HuaWei类:制作华为手机AbstractFactory类:生产不同产品的工厂的抽象类AppleFactory 类:生产苹果手机工厂HuaWeiFactory 类:生产华为手机工厂测试...原创 2020-03-13 20:56:50 · 84 阅读 · 0 评论 -
简单工厂模式
该模式是对对象创建管理方式最为简单的,因为其仅仅简单的对不同类对象的创建进行了一层封装。该模式通过向工厂传递类型来指定要创建的对象。模拟一个场景:根据手机的不同品牌去创建不同的手机对象Phone类:标准手机类Apple类:制作苹果手机HuaWei类:制作华为手机PhoneFactory类:创建手机的工厂测试类:执行结果:制作苹果手机制作华为手机类图如下:假如我们新增一个...原创 2020-03-13 19:51:30 · 105 阅读 · 0 评论 -
单例模式在JDK源码中的应用
单例模式保证了系统中该类只存在一个对象,当我们实例化一个单例类的对象时,必须要记住相应的去使用获取对象的方法,而不是new。对于一些频繁创建和销毁的对象或者消耗资源比较多的对象,比如工具类、频繁访问数据库等。单例模式一共有8种:饿汉式(静态常量)适合在单线程情况下使用饿汉式(静态代码块)适合在单线程情况下使用懒汉式(线程不安全)懒汉式(线程安全 同步方法)懒汉式(线程不安全 同...原创 2020-03-13 17:31:44 · 820 阅读 · 0 评论 -
单例模式之枚举类
推荐使用。原创 2020-03-13 16:51:44 · 109 阅读 · 0 评论 -
单例模式之静态内部类
静态内部类的优点是:外部类加载时并不需要立即加载内部类,内部类不被加载则不去初始化INSTANCE,故而不占内存。即当SingleTon第一次被加载时,并不需要去加载SingletonInstance,只有当getInstance()方法第一次被调用时,才会去初始化INSTANCE,第一次调用getInstance()方法会导致虚拟机加载SingletonInstance类,这种方法不仅能确保线...原创 2020-03-13 16:42:40 · 176 阅读 · 0 评论 -
单例模式之双重检查
特点:根据代码我们能看出,实例化代码块我们只执行了一次,后面在访问时,判断if (instance == null)以后,直接执行return,这样避免了反复进行代码块同步。使用了双重检查机制(Double-Check)和加入volatile关键字,就满足懒加载又满足线程安全,同时保证了效率问题,因此在实际开发中,推荐使用。...原创 2020-03-13 13:24:47 · 277 阅读 · 0 评论 -
单例模式之懒汉式
第一种:懒汉式(线程不安全):特点:相对于饿汉式来说,只有用到这个对象的时候,才会创建这个对象,但只适用于单线程的情况下,如果在多线程情况下,一个线程进入 if (instance == null) 判断语句,还没来得及往下执行,另外一个线程也进入了该判断语句,这时会产生两个实例,所以在实际开发中不用。第二种:懒汉式(线程安全 同步方法):特点:解决了线程安全的问题,但效率太低了,每个线...原创 2020-03-13 12:31:56 · 900 阅读 · 0 评论 -
单例模式之饿汉式
特点:保证类在内存中只能有一个对象第一种:饿汉式静态常量第一种:饿汉式静态代码块比较:两种方式本质上是一致的,在类装载的时候创建对象,都会带来一个问题:如果这个对象不用,会造成内存浪费。...原创 2020-03-13 11:26:32 · 130 阅读 · 0 评论