Java中有哪几种常见的设计模式

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

 

 

 

 

 

 

 

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值