设计模式-抽像工厂

文章目录

抽像工厂

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

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

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

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

首先是抽象工厂类

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();
    }
}
相关推荐
点云SLAM24 分钟前
C++依赖注入(Dependency Injection DI)vs单例设计模式(Singleton)
开发语言·c++·单例模式·设计模式·日志配置·依赖注入di·大项目系统
Geoking.28 分钟前
【设计模式】责任链模式(Chain of Responsibility)详解
java·设计模式·责任链模式
老蒋每日coding17 小时前
AI智能体设计模式系列(一)—— 提示词链
设计模式·ai编程
sxlishaobin21 小时前
设计模式之模板方法模式
设计模式·模板方法模式
le16161621 小时前
设计模式之单例模式
单例模式·设计模式
Knight_AL21 小时前
从单例模式说起:Java 常见设计模式的理解与实践
java·单例模式·设计模式
Engineer邓祥浩21 小时前
设计模式学习(10) 23-8 装饰者模式
python·学习·设计模式
老蒋每日coding21 小时前
基于LangGraph的AI Agent并行化设计模式详解
设计模式·ai编程
GISer_Jing21 小时前
AI学习资源总结:免费开放,入门至深入,持续更新
人工智能·学习·设计模式·prompt·aigc
Geoking.1 天前
【设计模式】策略模式(Strategy)详解:把 if-else 变成可切换的算法
java·设计模式·策略模式