设计模式-抽像工厂

文章目录

抽像工厂

何为抽象工厂模式
抽象工厂模式 是对简单工厂模式的一个变种,它允许通过一个统一的接口来创建不同的产品实例,而无需指定具体的子类。在这个模式中,我们只关心产品的抽象接口,而将具体的产品实现留给子类去实现。这样,我们可以通过创建不同的工厂对象来创建不同的产品实例,而无需关心它们实际实现的是哪个具体产品。

抽象工厂模式具体包含以及几个角色:

  • 抽象工厂:声明了一组用于创建一族产品的方法,每一个方法对应一个产品
  • 具体工厂:实现了在抽象工厂中声明的创建产品的方法,生产一族具体的产品。
  • 抽象产品接口:抽象工厂模式的核心是抽象产品接口,这里面定义了产品的基本结构以及行为
  • 具体的产品类:它定义具体的工厂生产的具体产品对象,实现了抽象产品接口中声明的业务

这里以某个厂家既生产车又生产手机为例

首先是抽象工厂类

java 复制代码
/**
 * 抽象共产类,主要定义了需要创建哪些产品
 */
public abstract class AbstractFactory {
    public abstract AbstractMindPhone createMindPhone();
    public abstract AbstractMindCar createMindCar();
}

具体工厂类

java 复制代码
/**
 * 具体的工厂类,继承了抽象共产并且重写了里面的方法,具体实现了xm厂家对car以及phone的对象返回
 */
public class XMFactory extends AbstractFactory {
    @Override
    public AbstractMindPhone createMindPhone() {
        return new XMMindPhone();
    }

    @Override
    public AbstractMindCar createMindCar() {
        return new XMMindCar();
    }
}

抽象产品类

java 复制代码
/**
 * 抽像的car类,定义了car的行为
 */
public abstract class AbstractMindCar {
    public abstract void drive();
    public abstract void automatic();
}
java 复制代码
/**
 * 抽象的phone,定义了phone的行为
 */
public abstract class AbstractMindPhone {
    public abstract void call();
    public abstract void msg();
}

具体产品类

java 复制代码
/**
 * 具体的产品类,对car的行为做了具体的实现
 */
public class XMMindCar extends AbstractMindCar {
    @Override
    public void drive() {
        System.out.println("XM drive");
    }

    @Override
    public void automatic() {
        System.out.println("XM automatic");
    }
}

public class XMMindPhone extends AbstractMindPhone {
    @Override
    public void call() {
        System.out.println("XM call");
    }

    @Override
    public void msg() {
        System.out.println("XM msg");
    }
}

对不同产品的实现以及使用

java 复制代码
public class Main {
    public static void main(String[] args) {
        AbstractFactory xmFactory = new XMFactory();
        AbstractMindCar mxCar = xmFactory.createMindCar();
        mxCar.automatic();
        mxCar.drive();

        AbstractMindPhone xmPhone = xmFactory.createMindPhone();
        xmPhone.call();
        xmPhone.msg();
    }
}
相关推荐
qq_381338502 小时前
Vue3 组合式函数设计模式:从基础封装到高级复用实战
前端·vue.js·设计模式
geovindu16 小时前
go: Lock/Mutex Pattern
开发语言·后端·设计模式·golang·互斥锁模式
学习中.........17 小时前
常见设计模式
java·设计模式
多加点辣也没关系19 小时前
设计模式-抽象工厂模式
java·设计模式·抽象工厂模式
洛水水19 小时前
设计模式入门:从设计原则到核心模式
c++·设计模式
多加点辣也没关系21 小时前
设计模式-组合模式
设计模式·组合模式
多加点辣也没关系21 小时前
设计模式-外观模式
设计模式·外观模式
咖啡八杯21 小时前
GoF设计模式——抽象工厂模式
java·后端·spring·设计模式·抽象工厂模式
是个西兰花21 小时前
单列模式和C++中的类型转换
c++·单例模式·设计模式·rtti
多加点辣也没关系1 天前
设计模式-享元模式
数据库·设计模式·享元模式