“
取得成就时坚持不懈,要比遭到失败时顽强不屈更重要。
----拉罗什夫科
”
第六题
1.简述下你了解的设计模式?
(1)设计模式的分类(加粗为常用)
1)设计模式的六大原则:
①开闭原则(Open Closed Principle,OCP);
②里氏代换原则(Liskov Substitution Principle,LSP);
③依赖倒转原则(Dependency Inversion Principle,DIP);
④接口隔离原则(Interface Segregation Principle,ISP);
⑤合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP);
⑥最小知识原则(Principle of Least Knowledge,PLK,也叫迪米特法则);
2)总体来说设计模式分为三大类:
①创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
②结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
③行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
(2)单例模式
1)单例类只能有一个实例。
2)单例类必须自己创建自己的唯一实例。
3)单例类必须给所有其他对象提供这一实例。
线程安全的饿汉式
(3)工厂模式
意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
关键代码:创建过程在其子类执行。
(4)装饰者模式
意图:装饰者模式通过组合的方式扩展对象的特性,这种方式允许我们在任何时候对对象的功能进行扩展甚至是运行时扩展。
主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。
何时使用: 在不想增加很多子类的情况下扩展类。
如何解决:将具体功能职责划分,同时继承装饰者模式。。
关键代码:①Component 类充当抽象角色,不应该具体实现。②修饰类引用和继承 Component 类,具体扩展类重写父类方法。
写在后面
本文章将以“指导面试,智取Offer”为宗旨,为广大Java开发求职者扫清面试道路上的障碍,成为面试官眼中的精英,朋友圈里的大神。在面试场上“胸有成竹”,坦然面对每个面试官的“拷问”,做到进可攻“项目经理、项目总监”等高级职务,视之为翘首可及;退可守“Java工程师、Java测试工程师”等职务,视之为探囊取物。无论进退、皆可立于不败之地。
The end