java 抽象工厂模式

这篇具有很好参考价值的文章主要介绍了java 抽象工厂模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

抽象工厂模式(Abstract Factory Pattern):

  是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

  在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

  抽象工厂模式提供了一种创建一系列相关或相互依赖对象的接口,而无需指定具体实现类。通过使用抽象工厂模式,可以将客户端与具体产品的创建过程解耦,使得客户端可以通过工厂接口来创建一族产品。

  意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

  主要解决:主要解决接口选择的问题。

  何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。

  如何解决:在一个产品族里面,定义多个产品。

  关键代码:在一个工厂里聚合多个同类产品。

优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

注意事项:产品族难扩展,产品等级易扩展。

抽象工厂模式包含以下几个核心角色:

  • 抽象工厂(Abstract Factory):声明了一组用于创建产品对象的方法,每个方法对应一种产品类型。抽象工厂可以是接口或抽象类。
  • 具体工厂(Concrete Factory):实现了抽象工厂接口,负责创建具体产品对象的实例。
  • 抽象产品(Abstract Product):定义了一组产品对象的共同接口或抽象类,描述了产品对象的公共方法。
  • 具体产品(Concrete Product):实现了抽象产品接口,定义了具体产品的特定行为和属性。

抽象工厂模式通常涉及一族相关的产品,每个具体工厂类负责创建该族中的具体产品。客户端通过使用抽象工厂接口来创建产品对象,而不需要直接使用具体产品的实现类。

===================================================================以上八股文来自 菜鸟教程,它从哪里来的不清楚 !!!!==============================================================

举个小例子:

  某个产品, 需要提供多个数据库支持(抽象工厂) ,比如 mysql 、 DB2 、Oracle 等等( 即一系列具体产品)  ,项目又被多个子公司使用  (各个子公司 就是 具体工厂),  各个子公司 有的用  mysql   有的用 DB2  或者两个都用 进行增删改查(某一具体产品)

java  抽象工厂模式

大概就是这么个情况。。。。。

代码如下:

1. 创建 数据库服务 抽象工厂 

public abstract class DBServerFactory {

     public abstract MysqlServer createMysqlServer();

     public abstract DB2Server createDB2Server();
}

 文章来源地址https://www.toymoban.com/news/detail-850297.html

2.创建 mysql  db2   是数据库 产品 接口

// mysql
public interface MysqlServer { public String mysqlJdbc(); public String mysqlSelect(); public String mysqlSave(); }
//db2
public interface DB2Server {
    public String  db2Jdbc();
    public String  db2Select();
    public String  db2Save();
}

3.创建  子公司  使用 实现

//iphone 公司使用db2
public class IphoneDB2 implements DB2Server {
    private final String factoryName= "Iphone";

    @Override
    public String db2Jdbc() {
        return factoryName + " db2 jdbc://xxxxxxxxxx";
    }

    @Override
    public String db2Select() {
        return factoryName + " db2 select User ==== 11";
    }

    @Override
    public String db2Save() {
        return factoryName + " db2 insert  User ==== 22";
    }
}

//iphone 公司使用mysql

public class IphoneMysql implements MysqlServer {

    private final String factoryName= "iphone";

    @Override
    public String mysqlJdbc() {
        return factoryName + " mysql jdbc://xxxxxxxxxx";
    }

    @Override
    public String mysqlSelect() {
        return factoryName + " mysql select User ==== 11";
    }

    @Override
    public String mysqlSave() {
        return factoryName + " mysql insert  User ==== 22";
    }
}

  

// kite 公司使用db2
public class KiteDB2 implements DB2Server {

    private final String factoryName= "kite";

    @Override
    public String db2Jdbc() {
        return factoryName + " db2 jdbc://xxxxxxxxxx";
    }

    @Override
    public String db2Select() {
            return factoryName + " db2 select User ==== 11";
    }

    @Override
    public String db2Save() {
            return factoryName + " db2 insert  User ==== 22";
    }
}

 4. 创建 子公司(子工厂)

// iPhone 子工厂
public
class IphoneFactory extends DBServerFactory{ @Override public MysqlServer createMysqlServer() { return new IphoneMysql(); } @Override public DB2Server createDB2Server() { return new IphoneDB2(); } }

 

// kite(子工厂)
public class KiteFactory extends DBServerFactory {
    @Override
    public MysqlServer createMysqlServer() {
        return null;
    }

    @Override
    public DB2Server createDB2Server() {
        return new KiteDB2();
    }
}

5. 使用 main 方法

 public static void main(String[] args) {
     //iphone
        DBServerFactory iphoneFactory = new IphoneFactory();
     //kite DBServerFactory kiteFactory
= new KiteFactory(); MysqlServer mysqlServer = iphoneFactory.createMysqlServer(); DB2Server iphoneDB2Server = iphoneFactory.createDB2Server();
DB2Server kiteDB2Server
= kiteFactory.createDB2Server(); System.out.println(mysqlServer.mysqlJdbc()); System.out.println(mysqlServer.mysqlSelect()); System.out.println(mysqlServer.mysqlSave()); System.out.println(kiteDB2Server.db2Jdbc()); System.out.println(kiteDB2Server.db2Select()); System.out.println(iphoneDB2Server.db2Jdbc()); System.out.println(iphoneDB2Server.db2Select()); System.out.println(iphoneDB2Server.db2Save()); }

6.结果

java  抽象工厂模式

 7.项目结构

java  抽象工厂模式

 

==========================================收工=================================================================================

 

到了这里,关于java 抽象工厂模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++11 设计模式4. 抽象工厂(Abstract Factory)模式

    从前面我们已经使用了工厂方法模式 解决了一些问题。 现在 策划又提出了新的需求:对于各个怪物,在不同的场景下,怪物的面板数值会发生变化,     //怪物分类:亡灵类,元素类,机械类     //战斗场景分类:沼泽地区,山脉地区,城镇。 那么就有9类怪物====沼泽地

    2024年04月14日
    浏览(45)
  • 设计模式-抽象工厂模式(Abstract Factory Pattern)结构|原理|优缺点|场景|示例

     目录         设计模式(分类)        设计模式(六大原则)        创建型         工厂方法         抽象工厂模式        单例模式        建造者模式        原型模式      结构型         适配器模式        装饰器模式      

    2024年04月22日
    浏览(38)
  • 《golang设计模式》第一部分·创建型模式-04-抽象工厂模式(Abstract Factory)

    在不具体指定产品类的情况下,为相互关联的产品簇或产品集提供创建接口,并向客户隐藏具体产品创建的细节或表示的对象。 AbstractFactory(抽象工厂):它声明了一组用于创建产品的方法,每一个方法对应一种产品。 ConcreteFactory(具体工厂):它实现了在抽象工厂中声明

    2024年02月14日
    浏览(44)
  • Abstract Factory Pattern 抽象工厂模式简介与 C# 示例【创建型】【设计模式来了】

    一句话解释:   提供一个接口,以创建一系列相关或相互依赖的抽象对象,而无需指定它们具体的类。 (将一系列抽象类装进接口,一次接口实现,就必须实例化这一系列抽象类) 抽象工厂模式(Abstract Factory Pattern)是一种创建型模式。它用于创建一组相关对象的家族。

    2024年02月07日
    浏览(42)
  • Abstract Factory 抽象工厂

    提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。 其中: AbstractFactory声明一个创建抽象产品对象的操作接口。 ConcreteFactory实现创建具体产品对象的操作。 AbstractProduct为一类产品对象声明一个接口。 ConcreteProduct定义一个将被相应的具体工厂创建的

    2024年04月11日
    浏览(41)
  • Java设计模式-简单工厂(Simple Factory)模式

    简单工厂(Simple Factory)模式,又称为静态工厂方法(Static Factory Method)模式。 由一个工厂类来创建具体产品,即创建具体类的实例。 简单工厂模式从概念上涉及三个角色: 抽象产品角色:是具体类的父类,规定了所有类的共同行为。一般是抽象类、或者接口。 具体产品角

    2024年02月16日
    浏览(38)
  • Java基础:简单工厂模式、工厂方法模式和抽象工厂模式综合概述

    简单工厂模式、工厂方法模式和抽象工厂模式是面向对象设计中用来实现对象创建灵活性的三种不同形式的工厂模式。它们各自有其特点、适用场景及优缺点。以下是它们之间的区别以及对应的适用场景,以及示例说明: 简单工厂模式 定义 : 简单工厂模式提供一个静态方法

    2024年04月25日
    浏览(35)
  • Java设计模式-抽象工厂模式

    设计模式是软件设计中的一种常见方法,通过定义一系列通用的解决方案,来解决常见的软件设计问题。其中,抽象工厂模式是一种非常常见的设计模式,它可以帮助我们创建一组相关的对象,而不需要指定具体的实现方式。 抽象工厂模式是一种创建型设计模式,它提供了一

    2024年02月01日
    浏览(41)
  • java设计模式【抽象工厂模式】

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

    2024年02月05日
    浏览(46)
  • java 抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern): 是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。

    2024年04月13日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包