常见面试题之设计模式

  • 设计模式分类

       创建模式:工厂模式,单例模式,原型模式等
       
       结构模式:适配器,组合,装饰器,门面,代理等
       
       行为模式:模板方法,责任链,策略,观察者等
    
  • 简单工厂,工厂方法,抽象工厂(创建模式)

     简单工厂:提供一个静态方法,根据传入的不同参数创建不同的对象(同一个父类,不同实现)
       
     工厂方法:需要两种或者以上的产品,提供一个接口,一个抽象方法,实现多个工厂,不同工厂生产不同类型的产品
     对生产的产品做简单的分配,单从大范围来看,还是一种产品。
     
     抽象工厂:需要生产一个产品族,来获得一个产品,产品族之间的产品是不能简单组合的,有兼容问题的;
     这样一个产品族的产品最好就能出自同一个工厂,提供一个接口,里面定义生产产品族的所有产品的抽象方法,
     每个工厂实现实现自己产品族的所有方法,不同的产品用不同的工厂即可。
    
     区别:
     	1.简单工厂强调简单需要一个类型的不同实现
     	
     	2.工厂方法强调需要使用多个工厂,对产品的简单分类,单其实还是属于一种类型产品
     	  (例子:食物,我们分为两个工厂生产,分别生产中国食物和美国食物,用不同的工厂生产)
     	  
     	3.抽象工厂强调生产一个产品,但是这个产品是由很多组件的,那么这些这个产品的所有组件最好来着一个工厂
     	  生产,这样避免组件之间有兼容问题。
     	 (例子:生产一台电脑,一个电脑有cpu,内存条,那么同一个品牌的产品,最好定义自己的工厂;
     	    工厂里面自己生产自己所有的子产品,最后构建一台电脑出来)
     	    
     总结:工厂模式都是强调怎么去生产一种类型的对象,生产出来的对象是一个父类的,带着这个思路去思考。
    
  • 单例模式(创建模式)

    饿汉式:直接使用静态变量,直接创建一个对象即可,然后使用一个静态方法暴露出去
    饱汉式:属于懒加载的方式,在需要时才去初始化,只要注意线程安全即可,建议使用双重检查的方式去使用同步块,
    但是要注意重排问题,所以声明的静态变量加上volatile
    枚举方式:将需要的对象定义在枚举中,在类加载就会进行实例化
    
  • 代理模式(结构模式)

    静态代理:代理类和被代理类对象是一种组合的关系,他们实现同一个接口,代理类的所有实现
    		都是内部调用被代理对象相应的方法,然后在调用前后做一些增强,更好控制被代理对象的访问,
    		让访问者与被访问对象进行解耦。
    		(缺点:每一个要实现代理的对象都要实现一个代理类,代码冗余,维护成本高)
    动态代理:动态代理对象可以通过JDK代理一个类就能对所有对象生成代理类,比较通用,实现的功能和
    		静态代理一样的。
    
  • 适配器模式(结构模式)

    适配器模式:适配器模式强调的是两个不相关的类型,但是有相似的功能,需要做功能的嫁接,这个时候我们就需要
    		添加一个适配器类,适配器需要继承我们需要的类型,然后要嫁接的功能通过组合对象的方式组合进来,
    		然后再适配器的实现方法中调用组合对象的方法作为实现,这样就达到了类型转换的作用。
    		
    适配器和代理模式区别:
    	   1.代理类的类型和被代理对象是同一种类型,而适配器不是
    	   2.代理目的是为了方法增强,控制被代理对象的访问;适配器目的只是为了将相同功能的对象,通过适配器
    	     作为类型的转换。
    
  • 策略模式(行为模式)

    策略模式:实现一个功能,有比较多的实现策略,需要不同场景和条件用到的实现是不同的.
    		(开发中常用的SpringContext,注入容器,然后通过beanName获取不同实现)
    
  • 模板方式模式(行为模式)

    模板方法:场景一般是,会定义一个抽象类,一般抽象类中只有一个方法实现,其他都定义为抽象方法。
    		这个实现的方法就是模板方法,定义抽象方法的调用顺序,定义基本的规则,具体行为交给子类去实现。
    
  • 责任链模式(行为模式)

    责任链模式:一般比较强调流程的流转的场景,定义一个抽象类,内部定义一个属性指定下一个处理器,定义一个抽象处理请
    求方法,然后将所有的处理器实现组成一个链表,每个实现是一个处理节点,用户发送请求,那么就会按照这个责任链
    一个个节点流转处理。(强调多个实现之间的组合处理流程,不强调单个实现的使用,这是与策略模式的区别)
    

猜你喜欢

转载自blog.csdn.net/weixin_38312719/article/details/106881791