【第八章:设计模式】第29节:面试常考设计模式(下)
大家好,本小节中我们继续交流学习常见的设计模式。在上一小节中,我们介绍了设计模式的六大原则,并且重点阐述了单例模式的多种写法。单例模式也是为数不多的可以在面试中直接“手撕”的设计模式。除了单例模式外,在面试中考察的其余常见设计模式一般都不会要求我们手写代码。
所以,我们可以重点掌握常见设计模式的思想,在面试中可以较为清晰的阐述该种设计模式主要是在干什么,需要怎么干即可。好了,让我们来看下面试中常见的设计模式吧~
(1)工厂方法模式:
工厂方法模式是一种常见的设计模式。工厂方法模式定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式使一个类的实例化延迟到其子类。
工厂方法模式的类图:
其中,Product和ConcreteProduct分别表示抽象产品类和具体产品类。Creator和ConcreteCreator则分别表示抽象创建类和具体创建类。抽象创建类Creator中定义了创建产品的方法createProduct。
这里我们给出一个简单的工厂方法模式的Demo:
package niuke.facatory; public class FactoryMethodTest { public static void main(String[] args) { // 创建具体的创建类对象 Creator creator = new ConcreteCreator(); // 通过传入指定的产品类对象,来创建对应的产品 Product product = creator.createProduct(ConcreteProduct1.class); // 创建对象之后,可以进行业务逻辑处理 product.method1(); product.method2(); } } // 定义抽象产品类 abstract class Product { // 产品类的公共方法 public void method1(){ // 公共的业务逻辑 } // 抽象方法 public abstract void method2(); } // 定义具体产品类 class ConcreteProduct1 extends Product { public void method2() { // 具体产品类1的业务逻辑处理 } } class ConcreteProduct2 extends Product { public void method2() { // 具体产品类2的业务逻辑处理 } } // 定义抽象创建类 abstract class Creator { // 创建对象的抽象方法 public abstract <T extends Product> T createProduct(Class<T> c); } // 定义具体的创建类,真正来创建所需的对象 class ConcreteCreator extends Creator { public <T extends Product> T createProduct(Class<T> c){ Product product=null; try { // 通过反射技术来创建对象 product = (Product)Class.forName(c.getName()).newInstance(); } catch (Exception e) { //异常处理 } return (T)product; } }
那么,工厂方法模式的优点有哪些呢?
- 工厂方法模式具有很好的封装性。客户端不需要知道创建对象的过程,只需要知道要创建的是哪个具体的产品即可。
- 工厂方法模式对扩展开放。当新增一个产品种类的时候,我们只需要传入新增产品类对象给具体工厂,即可返回新增的
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
Java开发岗高频面试题全解析 文章被收录于专栏
<p> Java开发岗高频面试题全解析,专刊正文共计31节,已经全部更新完毕。专刊分9个模块来对Java岗位面试中的知识点进行解析,包括通用面试技能,Java基础,Java进阶,网络协议,常见框架以及算法,设计模式等。专刊串点成面的解析每个面试题背后的技术原理,由浅入深,循序渐进,力争让大家掌握面试题目的背后的技术原理,摒弃背题模式的陋习。 专刊详细信息,请查阅专刊大纲和开篇词的介绍。 本专刊购买后即可解锁所有章节,故不可以退换哦~ </p> <p> <br /> </p>