设计模式1:工厂模式

简介: 本文是小卷学习设计模式系列的开篇,主要介绍了工厂模式及其在框架中的应用。工厂模式属于创建型设计模式,分为简单工厂模式、工厂方法模式和抽象工厂模式。简单工厂模式由一个工厂类根据参数创建对象;工厂方法模式通过子类实现具体对象的创建;抽象工厂模式用于创建多个相关联的对象族。文中还展示了Spring的`BeanFactory`和SLF4J的`LoggerFactory`作为实际案例。

开始学习设计模式,这是小卷学习设计模式的第1篇文章,今天了解下工厂模式,以及框架中用到工厂模式的案例

1.概览

概览.png

2.分类

设计模式分为三类:

  • 创建型:在创建对象的同时隐藏创建逻辑,不使用new直接实例化对象,程序判断创建哪些对象时更灵活
  • 结构型:通过类和接口间的继承、引用实现创建复杂结构的对象。
  • 行为型:通过类之间不同通信方式实现不同行为。

工厂模式属于创建型设计模式,具体可以分为三类:

  • 简单工厂模式,定义一个工厂类,根据传入参数动态创建不同类型的对象,缺点是新增产品需要修改工厂类逻辑,违背开闭原则
  • 工厂方法模式,将对象的创建延迟到子类,每个产品对应一个工厂类,扩展更好
  • 抽象工厂模式,用于创建产品族(多个相关联的系列对象),比如汽车工厂同时生产轮胎和引擎

3.简单工厂模式

简单⼯⼚模式指由⼀个⼯⼚对象来创建实例,客户端不需要关注创建逻
辑,只需提供传⼊⼯⼚的参数。

如:Spring的BeanFactory使用了简单工厂模式,根据传入一个唯一标识来获取Bean对象

下面是简单工厂模式的示例代码:

interface Car {
   
    void drive();
}

class Benz implements Car {
   
    @Override
    public void drive() {
   
        System.out.println("Benz.......");
    }
}

class Bmw implements Car {
   
    @Override
    public void drive() {
   
        System.out.println("Bmw......");
    }
}

class CarFactory {
   
    public Car createCar(String type) {
   
        if ("Benz".equals(type)) {
   
            return new Benz();
        }
        if ("Bmw".equals(type)) {
   
            return new Bmw();
        }
        throw new IllegalArgumentException("unknown type");
    }
}

public class SimpleFactory {
   
    public static void main(String[] args) {
   
        Car car = CarFactory.createCar("Bmw");
        car.drive(); //输出Bmw......
    }
}

4.工厂方法模式

定义一个抽象⼯⼚,其定义了产品的⽣产接⼝,但不负责具体的产
品,将⽣产任务交给不同的派⽣类⼯⼚

示例代码:

//工厂接口
interface CarFactory {
   
    Car createCar();
}
//每个产品对应一个工厂
class BenzFactory implements CarFactory {
   
    @Override
    public Car createCar() {
   
        return new Benz();
    }
}

class BmwFactory implements CarFactory {
   
    @Override
    public Car createCar() {
   
        return new Bmw();
    }
}

public class MethondFactory {
   
    public static void main(String[] args) {
   
        CarFactory carFactory = new BenzFactory();
        Car car = carFactory.createCar();
        car.drive(); //输出Benz.......
    }
}

5.抽象工厂模式

简单⼯⼚模式和⼯⼚⽅法模式不管⼯⼚怎么拆分抽象,都只是针对⼀类产
品,如果要⽣成另⼀种产品,就⽐较难办了!

抽象工厂模式通过在 AbstarctFactory中增加创建产品的接⼝,并在具体⼦
工厂中实现新加产品的创建

//产品族接口(汽车 + 轮胎)
interface Car {
   
    void drive();
}

interface Tire {
   
    void wear();
}

//具体产品族,Benz族系列
class BenzCar implements Car {
   
    @Override
    public void drive() {
   
        System.out.println("Benz Car.......");
    }
}

class BenzTire implements Tire {
   
    @Override
    public void wear() {
   
        System.out.println("Benz Tire......");
    }
}
//抽象工厂接口
interface CarAbstractFactory {
   
    Car createCar();
    Tire createTire();
}
//具体工厂实现
class BenzFactory implements CarAbstractFactory {
   
    @Override
    public Car createCar() {
   
        return new BenzCar();
    }
    @Override
    public Tire createTire() {
   
        return new BenzTire();
    }
}
//使用
public class AbstractFactory {
   
    public static void main(String[] args) {
   
        CarAbstractFactory carAbstractFactory = new BenzFactory();
        Car car = carAbstractFactory.createCar();
        Tire tire = carAbstractFactory.createTire();
        car.drive(); //输出Benz Car.......
        tire.wear();
    }
}

6.具体框架案例

SLF4JLoggerFactory就使用了工厂模式,调用getLogger()方法来获取Logger实例

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Demo {
   
    private static final Logger logger = LoggerFactory.getLogger(Demo.class);

    public static void main(String[] args) {
   
        logger.info("Hello SLF4J");
    }
}
相关文章
|
10月前
|
设计模式
设计模式【二】:工厂模式
设计模式【二】:工厂模式
59 0
|
设计模式 Java
设计模式~工厂模式-03
工厂模式 简单工厂模式 优点: 缺点: 工厂方法模式
66 0
|
6月前
|
设计模式 Java 关系型数据库
设计模式——工厂模式
工厂模式介绍、静态简单工厂模式、工厂方法模式、抽象工厂模式、JDK 源码分析
设计模式——工厂模式
|
10月前
|
设计模式 算法 uml
C++设计模式(工厂模式)
C++设计模式(工厂模式)
148 1
C++设计模式(工厂模式)
|
10月前
|
设计模式 前端开发 API
【设计模式】之工厂模式
工厂模式是一种常用的创建对象的设计模式,它通过封装对象的创建逻辑,提供统一的接口,实现了代码的解耦和可扩展性。在实际开发中,可以根据具体需求选择是否使用工厂模式来创建对象。工厂模式可以应用于任何需要创建对象的场景。通过使用工厂模式,我们可以提高代码的可维护性、可扩展性和可测试性,使得代码更加灵活和易于理解。
94 0
|
设计模式
设计模式之工厂模式
设计模式之工厂模式
77 0
|
设计模式 Java 数据库
设计模式之工厂模式(一)
设计模式之工厂模式
86 0
|
设计模式 SQL 搜索推荐
设计模式之工厂模式(二)
设计模式之工厂模式
139 0
|
设计模式 消息中间件 Java
一起来学设计模式之工厂模式
前言 目前正在出一个设计模式专题系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~ 本节给大家讲一下设计模式中的工厂模式~ 本专题的所有案例代码主要以Java语言为主, 好了, 废话不多说直接开整吧~ 工厂模式 工厂模式是一种常用的设计模式,它提供了一种创建对象的方式,该方式隐藏了对象创建的细节并提供了一个通用的接口,从而使得代码更加灵活和可扩展。在工厂模式中,我们将对象的创建过程封装到一个工厂类中,通过工厂类来创建具体的对象,这样客户端就不需要关心对象的创建过程,只需要调用工厂类提供的接口来获取所需的对象即可。
|
设计模式 Java 测试技术
浅谈设计模式 - 工厂模式(六)
在第一篇里面已经介绍过简单工厂了,但是工厂模式里面不仅仅是简单工厂,还存在工厂方法和抽象工厂,并且从严格意义来讲简单工厂不能算是一种设计模式,本次的文章针对工厂的进化来展开讲一讲工厂模式的三种常见形式:简单工厂、工厂方法、抽象工厂。
84 0