question3:了解哪些设计模式

**我觉得面试官问这个问题可以说是挖了个大坑,直接说单例、工厂、代理、适配器、观察者、外观、策略、建造者、享元、生产者和消费者等等等,我觉得你说出这个模式可能并不够,面试官肯定会问你用过哪些呀,所以我觉得关于设计模式不要贪多,重点了解几个常用,然后先说面向对象的solid,然后其他的设计模式也就是基于这几个原则来组合出来
**

SOLID(内功,以后写代码都要这么写)

  • S 单一职责:一个类只做他该做的事情(高内聚)。在面向对象中,如果只让一个类完成它该做的事情,而不涉及与它无关领域就是践行了高内聚的原则,这个类就只有单一职责
  • O 开放封闭:软件实体应当对扩展开发,对修改关闭。要做到开闭需要做到一些点
    1.抽象是关键,一个系统中如果没有抽象类或者接口也就是没有扩展点
    2.封装可变性,将系统中的各种可变因素封装在一个继承结构中,如果多个可变因素混杂在一起,系统将变得复杂而乱,错误不小心修改的话就会产生很大的损失,使用接口扩展而不要去修改源码
  • L 里氏变换:任何时候都可以使用子类型去替换掉父类型。子类一定是增加父类的能力而不是减少父类的能力,因为子类比父类的能力更多,把能力多的当成能力少的没有问题
  • I 接口隔离:接口要小而且专,不能大而全,臃肿的接口是对接口的污染,既然接口表示能力,那么接口就应该只描述一种能力,接口也应该是高度内聚的,一个接口中只定义几个一件大事情的几个小事情
  • D 依赖倒置: 面向接口编程。(该原则说直白一点就是和具体一些就是当声明方法的参数类型、方法的返回类型时候、变量的引用类型的时候尽量使用抽象类而不是具体类型,因为抽象类型可以被它的任意一个子类型替代)
  • 组合加接口 这个应该就是策略模式? 就是相当于声明一个接口类 然后具体实例可以是他的子类这样不仅可以复用代码,而且比继承更好的扩展(优先使用聚合组合方式来复用代码 )

单例

1.关于单例的使用,我记得好像spring注解里的bean啥的就是单例。。全忘了。。还有可以手写三种单例懒汉、恶汉、双重锁
懒汉

public class Singleton{
  private static Singleton instance;
  private Singleton(){}
  public static Singleton getInstance(){
    if(instance==null){
       intstance=new Singleton();
     }
     return instance;//下班了 回来写
  }
}

享元

2.关于享元 就要扯字符串常量池了,关于字符串常量池,可以扯得很多 常量池 运行常量池 而且这个享元模式在工程中可以用的到的

观察者

生产者消费者

工厂

动态代理

策略

福利:史上最强设计模式

你可能感兴趣的:(question3:了解哪些设计模式)