Java中一般认为有23种设计模式,分别是:

1.创建型模式,五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式;

2.结构型模式,七种:适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。

3.行为型模式,十一种:策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命令模式,备忘录模式,状态模式,访问者模式,中介者模式,解释器模式。

常见的有:单例模式,工厂方法模式,抽象工厂模式,建造者模式,适配器模式,装饰模式,策略模式,代理模式。

1.通过静态内部类来实现单例模式有什么好处?

1.避免线程排队,阻塞,节约时间。

2.调用getInstance()的时候,才会将符号引用变成直接引用,也就是初始化,类似懒加载,节约空间。

2.静态代理和动态代理有什么区别,在安卓中的使用场景是?

1.代理模式:分为静态代理和动态代理。例如:明星和经纪人就是一对被代理人和代理人。要明星表演就要通过经纪人来传达。我们把通过代理对象来间接操作目标对象的方式,称之为“代理模式”。

好处:在实现目标对象的功能的基础上,可以扩展额外功能,而不用改动目标对象。

静态代理:代理对象和目标对象要一起实现相同的接口,或者继承同一个父类。

动态代理:在程序运行时生成代理对象。

区别:

在给多个方法相同的类进行代理的时候,静态代理需要实现多个接口,太过麻烦。这个时候使用动态代理比较好。动态代理不需要去实现接口。

静态代理:代理对象在程序运行前就存在,要实现接口。

动态代理:代理对象在程序运行中生成,不需要实现接口。

场景:

静态:四大组件跟AIDL和AMS进行跨进程通信。

动态:Retrofit(基于OKHttp封装的网络请求框架)使用了动态代理,极大的提升了框架的扩展性和可维护性。

具体:https://www.cnblogs.com/jie-y/p/10732347.html

3.简单工厂、工厂方法、抽象工厂的区别?

简单工厂:一个工厂方法可以创建不同类型的对象;

工厂方法:一个具体工厂类只创建一个具体对象;

抽象工厂:一个具体工厂类只创建一系列相关的对象。

具体:https://www.cnblogs.com/heliusKing/p/11577837.html

4.建造者模式

将复杂对象创建的过程抽象出来,根据具体实现抽象的不同,生成的对象也不同。

具体:https://www.jianshu.com/p/afe090b2e19c

5.代理模式和装饰器模式的区别?

1.定义:

装饰器模式:给一个对象动态的添加一些额外功能,就增加功能来说,装饰器模式比生成子类更加灵活。

2.区别:

装饰器模式更加强调给一个对象添加功能,而代理模式更加强调对被代理对象的方法调用。装饰器模式是以客户端透明的方式为对象扩展功能的,而代理模式往往会隐藏被代理对象,在内部不想暴露出来。

参考文章:https://www.cnblogs.com/adamjwh/p/9036358.html

6.什么是桥接模式?

桥接模式:主要为了应对某个类族有多个变化维度,导致子类类型急剧增加的场景。通过桥接模式把多个变化维度分隔开,使它们可以独立的变化,最后通过组合以应对多维变化,减少子类类型的数量和复杂度。

具体:https://www.cnblogs.com/WindSun/p/10260547.html

7.外观模式和中介模式的区别?

外观模式:为子系统一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使子系统更加容易使用。

具体:https://www.cnblogs.com/adamjwh/p/9048594.html

中介模式:用来解决多个对象显式相互调用造成的耦合,使用一个中介来使耦合松散,使类之间减少依赖。

具体:https://www.jianshu.com/p/298ef103b484

区别:

外观模式重点是对外封装统一的高层接口,便于用户使用;而中介模式是为了避免多个相互协作的对象直接引用,通过一个中介对象进行交互,使耦合松散,能够易于应对变化。

8.策略模式和状态模式的区别?

策略模式:定义了一组算法,把每个算法都封装起来,并且使他们可以互相切换。

具体:https://www.cnblogs.com/adamjwh/p/11011095.html

状态模式:当一个对象内部状态改变时,允许改变其行为,这个对象看起来好像改变了其类。

具体:https://www.jianshu.com/p/5bf844141687

区别:

虽然他们类型结构一致,但是本质是不一样的。策略模式重点是切换整个算法,而状态模式是改变状态,改变其行为。

9.适配器模式,代理模式,装饰器模式,外观模式的异同?

适配器模式:将一个已经存在的接口转换成客户希望的另一个接口,使接口不兼容的类可以协同工作。

具体:https://blog.csdn.net/wwwdc1012/article/details/82780560

同:

它们都是作为中间层,起到用户间接调用真实类方法的作用。

异:

1.使用场景和思想不一样;

2.代理模式,代理目标对象,控制对该对象的访问;

外观模式,外观对象提供子系统各元件功能简化为共同层次的调用接口,它主要起“简化作用”;

适配器模式,是对其他对象接口的一种转换行为,将原接口转换为目标接口,达到适配的效果;

装饰器模式,给对象动态增加功能。

代理是“控制访问行为”,外观是“简化行为”,适配器是“转换行为”,装饰器是“新增行为”。

参考文章:https://juejin.im/post/5e5c5c52f265da575f4e7558

Java中有哪几种常见的设计模式相关推荐

  1. java单例模式的七种写法_Java设计模式之单例模式的七种写法

    什么是单例模式? 单例模式是一种常见的设计模式,单例模式的写法有很多种,这里主要介绍三种: 懒汉式单例模式.饿汉式单例模式.登记式单例 . 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类 ...

  2. c语言中最常用的四种数据类型,计算机中有哪几种常见数据类型

    计算机中有哪几种常见数据类型 数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作.下面是YJBYS小编带来的计算机中有哪几种常见数据类型介绍,希望对你有帮助. 一.指令系统概述 指 ...

  3. Java RestTemplate中几种常见的请求方式

    在REST接口的设计中,利用RestTemplate进行接口测试是种常见的方法.本文主要从以下四个方面来看RestTemplate的使用: GET请求 POST请求 PUT请求 DELETE请求 OK ...

  4. Java 枚举(enum) 7种常见的用法

    在JDK1.5引入了新的类型--枚举.在 Java 中它虽然算个"小"功能,却给我的开发带来了"大"方便. 用法一:常量 在JDK1.5 之前,我们定义常量都是 ...

  5. 【JAVA定时器】四种常见定时器的原理和简单实现

    个人学习笔记分享,当前能力有限,请勿贬低,菜鸟互学,大佬绕道 如有勘误,欢迎指出和讨论,本文后期也会进行修正和补充 前言 定时器顾名思义,即定时触发某个事件,分离开来,即包含三个因素:定时,触发,某个 ...

  6. java四舍五入_Java几种常见的四舍五入的方法

    展开全部 下面给你介绍3种常见的四舍五入: // 方式e68a8462616964757a686964616f31333365653764一:BigDecimal方式 double f = 3.131 ...

  7. Java几种常见的设计模式

    --------------------- 本文来自 旭日Follow_24 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/xuri24/article/detail ...

  8. Java接口的几种常见用法

    接口(interface)对于面向对象编程来说是一个非常重要的概念.它是一系列方法的声明,却没有具体实现.有些编程语言,比如swift,把接口解释成"协议(protocol)",我 ...

  9. java中有哪几种访问修饰符_Java语言中有4种访问修饰符

    转载:http://wuhaidong.iteye.com/blog/851754 Java语言中有4种访问修饰符 在Java语言中有4中访问修饰符:package(默认).private.publi ...

最新文章

  1. WPF oxyPlot 使用总结
  2. 成为一流CSS设计师的8大技巧
  3. Linux捕捉信号机制之(signal,kill)、(sigaction,sigqueue)
  4. Windows 编译cython nms
  5. Mono for Android 对话框 倒计时
  6. java怎么使用wcf_如何使用WCF服务
  7. 【kafka】kafka 消息头的强大功能
  8. Altium Designer(二):规则设置
  9. apt-get install的默认安装路径是什么
  10. matlab信号与系统论文,基于MATLAB的《信号与系统》课程教学研究
  11. 文件传输工具rzsz
  12. 360手机助手下载|360手机助手下载
  13. 电阻电容电感PCB封装真实尺寸大小
  14. 3D全息投影 大家可以自己动手制作
  15. 目标跟踪数据集整理(三)----GOT-10k
  16. mpeg1,mpeg2,mpeg4
  17. systemctl status network.service命令,Failed to start LSB: Bring up/down networking.完美解决
  18. 基本类型为空导致线上空指针异常问题 java.lang.NullPointerException: cannot unbox null value
  19. WOS(Web of Science)检索规则
  20. 梳妆谐振器的matlab实现,基于HOPF振荡器的CPG单元模型matlab实现

热门文章

  1. java项目实验报告_javaweb项目实验报告.docx
  2. 使用Nero 7 刻录DVD镜像文件(Linux,Window的iso文件)
  3. 大数据相关总结(待续)
  4. ImageLoader 详解
  5. Java学习笔记之五:Nexus配置为强制从maven私服下载
  6. 无线串口模块通信技术参数快速选型指南
  7. 网站建设(一)PHP深入学习
  8. MSTP多实例配置实验
  9. Day7 String类
  10. 计算机科学家帕斯卡,帕斯卡-世界上最伟大的科学家排行榜-天天排行网