你知道那些常用的设计模式?

1. 单例模式:单例模式保证系统内存中该类只有一个对象。

优势:可以防止频繁的创建和销毁对象造成的资源浪费,以此来提高系统性能。

实现方式:懒汉模式创建和饿汉模式创建。

应用场景:我们JDK中,java.lang.Runtime就是百科全书的单例模式(饿汉式),spring里面就是用了单例模式

2.工厂模式:将实例化对象的代码提取出来,放到一个类里面统一管理,由子类决定是否实例化。

link

优势:工厂方法模式具有很好的封装性。客户端不需要知道创建对象的过程,只需要知道要创建的是哪个具体的产品即可。

实现方式:简单工厂模式,工厂方法模式,抽象工厂模式。

简单工厂模式:将被使用方的创建过程封装到一个类中,这样就在使用方和被使用方之间做了一个缓冲,也就是使用方和被使用方做了一个解耦,提高了软件的可扩展性和可维护性和可复用性.

工厂方法模式:将简单工厂的创建对象的方法写成一个抽象方法,也就是在工厂类或者接口中不知道如何创建该对象,创建具体对象交给工厂类的子类或者实现类去做.

抽象工厂模式:抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。,抽象工厂方法不再是单独的接口,而是生产一类产品的接口,可以生产多个相关联产品。

抽象工厂模式和工厂方法模式的区别:

如果产品单一,适合使用工厂模式。但是如果有多个业务品种、业务分类时,需要使用抽象工厂模式。也就是说,工厂模式针对的是一个产品等级结构 ,抽象工厂模式针对的是面向多个产品等级结构的。

3. 代理模式:将原类进行封装,客户端不能直接找到原类,必须通过代理角色。即代理是原类的一个替身,客户端要找原类,必须找代理才可以搞定。明星和经纪人的关系就是一种代理模式。

优势:为一个对象提供一个替身,以控制对这个对象的访问.即通过代理对象访问目标对象.这样做的好处 是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.

实现方式:静态代理和动态代理。

应用场景:动态代理在实现阶段不用关心代理谁,而在运行阶段才指定代理哪一个对象。相对来说,自己写代理类的方式就是静态代理。

4. 装饰器模式

优势:动态的将新功能附加到对象上.在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了 开闭原则(ocp)

实现方式:静态代理和动态代理。

应用场景:String 常量池,数据库连接池

5. 享元模式:系统中有大量对象,这些对象消耗大量内存,并且对象的状态大部分可以外部化时,我们就可以考虑选用享元模式。在享元模式这样理解,“享”就表示共享,“元”表示对象

优势:享元模式大大减少了对象的创建,降低了程序内存的占用,提高效率。

实现方式:静态代理和动态代理。

应用场景:String 常量池,数据库连接池

6. 模板模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一 个算法的结构,就可以重定义该算法的某些特定步骤。

优势:实现了最大化代码复用。

实现方式:它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.

应用场景:当要完成在某个过程,该过程要执行一系列步骤 ,这一系列的步骤基本相同,但其 个别步骤在实现时 可能不同,通常考虑用模板方法模式来处理

7. 策略模式:定义算法族(策略组),分别封装起来,让他们之间可以互相替换,此模式 让算法的变化独立于使用算法的客户

优势:体现了“对修改关闭,对扩展开放”原则,客户端增加行为不用修改原有代码,只要添加一种策略(或者行为) 即可,避免了使用多重转移语句

实现方式:策略模式将算法封装在独立的 Strategy 类中使得你可以独立于其 Context 改 变它,使它易于切换,易于理解,易于扩展

应用场景: JDK的数组的比较器就使用了策略模式

8. 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象

优势:允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节

实现方式:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它 们自己来实施创建,即 对象.clone()

应用场景:Spring 中原型 bean 的创建,就是原型模式的应用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值