设计模式-抽像工厂

文章目录

抽像工厂

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

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

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

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

首先是抽象工厂类

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();
    }
}
相关推荐
EmbedLinX3 小时前
嵌入式Linux C++常用设计模式
linux·c++·设计模式
短剑重铸之日4 小时前
《设计模式》第七篇:适配器模式
java·后端·设计模式·适配器模式
Andy Dennis6 小时前
一文漫谈设计模式之创建型模式(一)
java·开发语言·设计模式
thisiszdy9 小时前
<设计模式> Pimpl模式
设计模式
三水不滴9 小时前
23种设计模式
经验分享·笔记·设计模式
凯尔萨厮10 小时前
软件23种设计模式(学习笔记)
笔记·学习·设计模式
短剑重铸之日10 小时前
《设计模式》第八篇:三大类型之创建型模式
java·后端·设计模式·创建型设计模式
短剑重铸之日1 天前
《设计模式》第六篇:装饰器模式
java·后端·设计模式·装饰器模式
茶本无香1 天前
设计模式之十二:模板方法模式Spring应用与Java示例详解
java·设计模式·模板方法模式
wangmengxxw1 天前
设计模式 -详解
开发语言·javascript·设计模式