java设计模式-个人总结

1.常见设计模式知道哪些?

2.设计模式的分类

创建型设计模式:

  • 单例模式
  • 构建模式
  • 原型模式
  • 抽象工厂模式
  • 工厂方法模式

行为设计模式:

  • 状态模式
  • 命令模式
  • 解释器模式
  • 迭代器模式
  • 备忘录模式
  • 责任链模式
  • 模板方法模式
  • 观察者模式
  • 访问者模式
  • 中介者模式

结构型设计模式:

  • 装饰者模式
  • 外观模式
  • 组合模式
  • 蝇量模式
  • 代理模式
  • 享元模式
  • 桥连接模式
  • 适配器模式

简单解释:

单例模式(Singleton):确保有且只有一个对象被创建。

抽象工厂模式(Abstract Factory):允许客户创建对象的家族,而无需指定他们的具体类。

工厂方法模式(Factory Method):由子类决定要创建的具体类是哪一个。

装饰者模式(Decorator):包装一个对象,以提供新的行为。

状态模式(State):封装了基于状态的行为,并使用委托在行为之间切换。

迭代器模式(Iterator):在对象的集合之中游走,而不暴露集合的实现。

外观模式(Facade):简化一群类的接口。

策略模式(Strategy):封装可以互换的行为,并使用委托来决定要使用哪一个。

代理模式(Proxy):包装对象,以控制对此对象的访问。

适配器模式(Adapter):封装对象,并提供不同的接口。

观察者模式(Observer):让对象能够在状态改变时被通知。

模板方法模式(Template Method):有子类决定如何实现一个算法中的步骤。

组合模式(Composite):客户用一致的方法处理对象集合和单个对象。

命令模式(Command):封装请求成为对象。

附:https://www.cnblogs.com/liuzhen1995/p/6047932.html

3.单例模式

1.单例模式5常见的写法

  • 饿汉式
  • 懒汉式
  • 双检锁
  • 静态内部类
  • 枚举

2.单例的四大原则:

  • 构造私有
  • 以静态方法或者枚举
  • 确保实例只有一个,尤其是多线程环境
  • 确保反序列化时不会重新构造对象

3.代码

饿汉模式-在类被初始化时就已经在内存中创建了对象:以空间换时间,故不存在线程安全问题。

public class SingleTon{
  //其实就是new 
    private static SingleTon INSTANCE = new SingleTon();
  private SingleTon(){}
 public static SingleTon getInstance(){ return INSTANCE; }}
 

懒汉模式-在方法被调用后才创建对象,以时间换空间,在多线程环境下存在风险

public class SingleTon{
  //先赋null 调用方法才申请内存空间
    private static SingleTon  INSTANCE = null;
    private SingleTon(){}
  //其实就是调用方法才new
    public static SingleTon getInstance() {  
    if(INSTANCE == null){
       INSTANCE = new SingleTon();
    }
     return INSTANCE;
  }
 }

静态内部类-用的最多

public class SingleTon{
   private SingleTon(){}
 //就是静态内部类里面new
   private static class SingleTonHoler{
      private static SingleTon INSTANCE = new SingleTon();
  }
 
   public static SingleTon getInstance(){
     return SingleTonHoler.INSTANCE;
  }
 }

双检检查锁

public class SingleTon{
   private static SingleTon  INSTANCE = null;
   private SingleTon(){}
  //就是俩个多了if判断 和 synchronized
   public static SingleTon getInstance(){if(INSTANCE == null){
    synchronized(SingleTon.class){
      if(INSTANCE == null){
         INSTANCE = new SingleTon();
        }
      }
         return INSTANCE;
    }
  }
 }

SingleTon方法

INSTANCE  = new SingleTon(); 

SingleTon方法:

1.在堆内存开辟内存空间。

2.在堆内存中实例化SingleTon里面的各个参数。

3.把对象指向堆内存空间。

附:深入理解单例模式:静态内部类单例原理https://blog.csdn.net/mnb65482/article/details/80458571

4.说下设计模式的原则

1.设计模式的六大原则

  • 开闭原则
  • 里氏替换原则
  • 依赖倒转原则
  • 接口隔离原则
  • 最少知道原则
  • 合成复用原则

解释:

开闭原则:对扩展开放,对修改关闭。

里氏代换原则:父类与子类的继承关系,在父类的基础上有新的方法(行为),调用的时候又能代替父类的方法而且不影响;

依赖倒转原则:针对接口编程依赖于抽象而不依赖于具体;

最少知道原则:单一继承或者说就是单调用减少相互作用

合成复用原则:尽量使用合成/聚合的方式,而不是使用继承。

5.Spring 框架中都用到了哪些设计模式?

【单例模式】

  • Spring 中的 Bean 默认都是单例的

【简单工厂】

  • 由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。
  • Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。

【工厂方法】

  • 实现了FactoryBean接口的bean是一类叫做factory的bean。其特点是,spring会在使用getBean()调用获得该bean时,会自动调用该bean的getObject()方法,所以返回的不是factory这个bean而是这个bean.getOjbect()方法的返回值

【模板方法模式】

  • Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。
  • 父类定义了骨架(调用哪些方法及顺序),某些特定方法由子类实现。
  • 最大的好处:代码复用,减少重复代码。除了子类要实现的特定方法,其他方法及方法调用顺序都在父类中预先写好了。

【包装器设计模式 】

  • 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源

【观察者模式】

  • Spring 事件驱动模型就是观察者模式很经典的一个应用。
  • spring的事件驱动模型使用的是 观察者模式 ,Spring中Observer模式常用的地方是listener的实现

【适配器模式】

  • Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller。
  • Spring定义了一个适配接口,使得每一种Controller有一种对应的适配器实现类,让适配器代替controller执行相应的方法。这样在扩展Controller时,只需要增加一个适配器类就完成了SpringMVC的扩展

【装饰器模式】

  • 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。
  • Spring中用到的包装器模式在类名上有两种表现:一种是类名中含有Wrapper,另一种是类名中含有Decorator

【动态代理】

  • 切面在应用运行的时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象创建动态的创建一个代理对象。SpringAOP就是以这种方式织入切面的。
  • 织入:把切面应用到目标对象并创建新的代理对象的过程。

【策略模式】

  • Spring框架的资源访问Resource接口。该接口提供了更强的资源访问能力,Spring 框架本身大量使用了Resource 接口来访问底层资源。

6.项目中用到哪些设计模式?

#你觉得今年春招回暖了吗##23届找工作求助阵地##软件开发薪资爆料##我的实习求职记录#
全部评论
java设计模式-个人总结
3 回复
分享
发布于 2023-03-10 23:20 北京

相关推荐

22 52 评论
分享
牛客网
牛客企业服务