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