Java面试 背诵版 适配器模式、桥接模式、策略模式、模板方法

设计模式里面这几种 是常考类型,现在总结一下,虽然大家可以看懂,但内容最好背诵一下,便于加深理解,防止面试的时候描述含糊,闪烁其词。

目录

    • 适配器模式 Adapter Pattern
    • 桥接模式 Bridge Pattern
    • 策略模式 Strategy Pattern
    • 模板方法

适配器模式 Adapter Pattern

  • 适配器模式详细介绍 参照下面两篇文章
    菜鸟 适配器模式
    csdn适配器模式
    概述:(背诵)
    适配器模式是作为两个不兼容的接口之间的桥梁
    适配器继承或依赖(推荐)已有的对象,实现想要的目标接口
    关键代码:(背诵)
//Adaptee  适配者
//Target 接口
public class Adapter extends Adaptee implements Target{
    @Override
    public void request() {
        //...一些操作...
        super.adapteeRequest();
        //...一些操作...
    }
}
//或者
public class Adapter implements Target {
    // 适配者是对象适配器的一个属性
    private Adaptee adaptee = new Adaptee();

    @Override
    public void request() {
        //...
        adaptee.adapteeRequest();
        //...
    }
}

应用场景 (背诵):

  • 在JDK类库的事件处理包java.awt.event中广泛使用了缺省适配器模式,如WindowAdapter、KeyAdapter、MouseAdapter等
  • SpringMVC中的适配器HandlerAdatper
  • Spring AOP 模块对 BeforeAdvice、 AfterAdvice、 ThrowsAdvice 三种通知类型的支持实际上是借助适配器模式来实现的
  • Spring的ORM包中,对于JPA的支持也是采用了适配器模式

桥接模式 Bridge Pattern

  • 主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。
  • 将抽象部分与实现部分分离,使它们都可以独立的变化
  • 关键代码:抽象类依赖接口
  • csdn桥接模式
  • 菜鸟桥接模式
//电脑品牌
public interface Brand {
    void sale();
}
// 电脑类型+ 获得 品牌的引用
public abstract class Computer {
    protected Brand brand;
    public Computer(Brand b) {
        this.brand = b;
    }
   public abstract void sale();  
}
//  创建电脑类型
class Desktop extends Computer {
...

应用场景:jdbc桥接模式

策略模式 Strategy Pattern

主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
如何解决:将这些算法封装成一个一个的类,任意地替换。
注意事项:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。
菜鸟策略模式
csdn策略模式

public interface Strategy {...
public class Context {
   private Strategy strategy;
 
   public Context(Strategy strategy){
      this.strategy = strategy;
   }...

注意策略模式 和桥接模式的区别

模板方法

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

public abstract class Game {
   abstract void initialize();
   abstract void startPlay();
   abstract void endPlay();
 
   //模板
   public final void play(){
      //初始化游戏
      initialize();
      //开始游戏
      startPlay();
      //结束游戏
      endPlay();
   }
}
public class Football extends Game {

应用场景:
AbstractApplicationContext最重要的refresh方法
SpringTemplate中的query

你可能感兴趣的:(java面试)