首页 > 其他分享 >抽象工厂模式

抽象工厂模式

时间:2024-03-13 13:55:37浏览次数:18  
标签:void IConnect 模式 工厂 class 抽象 connect Override public

本文借助jdk中实现jdbc的原理来描述描述一下抽象工厂模式,首先定义两个抽象接口:连接接口和命令接口。

interface IConnect{
    void connect();
}
interface ICommand{
    void command();
}

此时再定义一个数据库操作util用来对数据库进行抽象对数据库进行处理。

interface IDatabaseUtils{
    IConnect getConnect();
    ICommand getCommand();
}

此时如果我们使用mysql作为数据库使用,那么具体实现一下数据库连接接口、数据库命令接口和mysql工具类。

class MysqlConnect implements IConnect{

    @Override
    public void connect() {
        System.out.println("connect mysql ...");
    }
}
class MysqlCommand implements ICommand{

    @Override
    public void command() {
        System.out.println("mysql command...");
    }
}

class MysqlUtils implements IDatabaseUtils{

    @Override
    public IConnect getConnect() {
        return new MysqlConnect();
    }

    @Override
    public ICommand getCommand() {
        return new MysqlCommand();
    }
}

假如封装到一个jar包中给所有人使用时,缺少oracle处理工具,我们只需要再具体实现一下数据库连接接口、数据库命令接口和oracle工具类,而不需要去动原有代码

class OracleConnect implements IConnect{

    @Override
    public void connect() {
        System.out.println("connect oracle ...");
    }
}
class OracleCommand implements ICommand{

    @Override
    public void command() {
        System.out.println("oracle command...");
    }
}

class OracleUtils implements IDatabaseUtils{

    @Override
    public IConnect getConnect() {
        return new OracleConnect();
    }

    @Override
    public ICommand getCommand() {
        return new OracleCommand();
    }
}

对于上面的示例代码,我们可以通过下面这种方式简单调用,通过IDatabaseUtils引用而不需要关注被调用的具体实现细节

public class AbstractFactoryTest {
    public static void main(String[] args) {
        IDatabaseUtils iDatabaseUtils = new OracleUtils();

        // 不再需要关注被调用的具体细节
        iDatabaseUtils.getConnect().connect();
        iDatabaseUtils.getCommand().command();
    }
}

总结:抽象工厂模式就是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。优点:1.可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理;2.当增加一个新的产品族时不需要修改原代码,满足开闭原则。

标签:void,IConnect,模式,工厂,class,抽象,connect,Override,public
From: https://www.cnblogs.com/luolin-cn/p/18070463

相关文章

  • calico ipip模式实验
    实验步骤1-创建网络空间,设备,并配置HOST_IP=$(hostname-I|awk'{print$1}')POD1_IP=10.96.30.11POD2_IP=10.96.30.12GATEWAY_IP=169.254.1.1#1.创建networknamespaceipnetnsaddpod1ipnetnsaddpod2#2.创建vethpair并加入到namespaceiplink......
  • 设计模式--单例模式
    单例模式的3种实现方式:饿汉式、懒汉式双重检查1.饿汉式(EagerInitialization)饿汉式单例模式在类加载时就创建实例,因此线程安全,但可能会增加程序启动时间和内存消耗。#include<iostream>classSingleton{public://获取单例对象的静态方法staticSingleto......
  • 一键开启 GPU 闲置模式,基于函数计算低成本部署 Google Gemma 模型服务
    作者:王骜本文介绍如何使用函数计算GPU实例闲置模式低成本、快速的部署GoogleGemma模型服务。背景信息Google在2024年02月21日正式推出了自家的首个开源模型族Gemma,并同时上架了四个大型语言模型,提供了2B和7B两种参数规模的版本,每种都包含了预训练版本(base模......
  • 多人协作:git flow开发模式
    多人协作如何实现多人协作,共同开发一个项目,每个人负责一些功能?为每个人创建一个dev分支,或者以每个人负责的功能为命名创建dev分支(gitflow工作流)在GitHub中添加合作者1.个人添加在仓库的settings选项中,选择collaborators选项2.组织添加创建一个组织设置组织的一系列信......
  • Qt 大端模式、小端模式及其转换
    大端模式和小端模式是计算机中经常涉及到的两种字节序,也有大端对齐、小端对齐、大尾、小尾等叫法。一、起源说起这两种模式,就不得不提一下大端(Big-endian)和小端(Little-endian)这两个英文上的起源。“endian”一词来源于乔纳森·斯威夫特的小说格列佛游记。Lilli......
  • mac redis启动,redis哨兵模式,redis集群的相关命令
    Homebrew安装的软件会默认在/usr/local/Cellar/路径下redis的配置文件redis.conf存放在/usr/local/etc路径下cd/usr/local/Cellar/redis/7.0.10.存在cd/usr/local/opt/redis/bin/redis-server.目录存在cd/usr/local/etc/redis.conf存在。配置文件复制文件cp/us......
  • 设计模式 -- 1:简单工厂模式
    目录代码记录代码部分代码记录设计模式的代码注意要运用到面向对象的思想考虑到紧耦合和松耦合把具体的操作类分开不让其互相影响(注意这点)下面是UML类图代码部分#include<iostream>#include<memory>//引入智能指针的头文件usingnamespacestd;......
  • 2、策略模式
    C++抽象类(接口)一、接口:描述类的行为和功能,而无需完成类的特定实现C++接口通过抽象类实现的,设计抽象类的目的,是为了给其他类提供一个可以继承的适当的基类;如果派生类没有重写所有纯虚函数,则派生类也是抽象类(抽象派生类);派生类只有实现所继承的抽象基类中的所有纯虚......
  • 单例模式的几种实现方式
    单例模式的实现有多种方式,如下所示:1、懒汉式,线程不安全是否Lazy初始化:是是否多线程安全:否实现难度:易描述:这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁synchronized,所以严格意义上它并不算单例模式。这种方式lazyloading很明显,不要......
  • 工业智能网关的网关模式和交换机模式有哪些区别
    工业智能网关主要用以实现工业物联网络中不同设备和系统之间的通信,工业智能网关常见的两种工作模式是网关模式和交换机模式,在功能和应用场景上存在显著差异,本篇就为大家简单介绍一下两者之间的主要区别: 1、网关模式工业智能网关的网关模式可以实现不同网络和设备之间的数据交......