【第八章:设计模式】第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>

全部评论
动手实现一下这些设计模式才能更好的理解作者总结的内容
3 回复 分享
发布于 2020-03-02 22:43
打卡
点赞 回复 分享
发布于 2023-11-14 13:36 河南
两种动态代理的实现能否在详细讲一下吗
点赞 回复 分享
发布于 2020-12-14 16:48
打卡。一刷
点赞 回复 分享
发布于 2020-09-26 16:25
打卡 一刷。
点赞 回复 分享
发布于 2020-09-14 17:19
模板方法模式是抽象工厂模式吗
点赞 回复 分享
发布于 2020-07-29 20:33
打卡
点赞 回复 分享
发布于 2020-07-04 11:27
面试中最常考的是哪几种设计模式
点赞 回复 分享
发布于 2020-05-19 23:40
<div> 常见的还有 </div> <div> 观察者模式(Zookeeper中的服务端的变动通知客户端), </div> <div> 适配器模式 </div> <div> 策略模式: </div> <div> 希望大佬有时间能再讲讲 </div>
点赞 回复 分享
发布于 2020-04-14 00:47
是不是还有发布订阅模式呀....
点赞 回复 分享
发布于 2020-03-08 22:11

相关推荐

qq乃乃好喝到咩噗茶:院校后面加上211标签,放大加粗,招呼语也写上211
点赞 评论 收藏
分享
豆泥🍀:同26届,加油,我也还没找到查看图片
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务