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

抽象工厂模式-04

时间:2023-06-14 13:01:08浏览次数:30  
标签:implements ProductB ProductA 工厂 public 抽象 new class 04

概述

抽象工厂 (abstract factory) 模式又称 Kit 模式,由一个抽象工厂类、多个抽象产品类以及这些抽象类的多个具体子类构成。每个具体工厂类可以创建每个抽象产品类的某个具体子类。

优点:高内聚低耦合,符合“开闭原则”。
缺点:难以添加新的产品类,这涉及到更改抽象工厂类,这个类的修改涉及到其他所有类。

interface ProductA {
  show();
}

class ProductA1 implements ProductA {
  show() {
    //
  }
}

class ProductA2 implements ProductA {
  show() {
    //
  }
}

interface ProductB {
  use();
}

class ProductB1 implements ProductB {
  use() {
    //
  }
}

class ProductB2 implements ProductB {
  use() {
    //
  }
}

interface Factory {
  ProductA createA();
  ProductB createB();
}

class Factory1 implements Factory {
  public static ProductA createA() {
    return new ProductA1();
  }
  
  public static ProductB createB() {
    return new ProductB1();
  }
}

class Factory2 implements Factory {
  public static ProductA createA() {
    return new ProductA2();
  }
  
  public static ProductB createB() {
    return new ProductB2();
  }
}

public class Test {
  public static void main(String[] args) {
    Factory f;
    ProductA pa;
    ProductB pb;
    f = new Factory1(); // or get from some file
    pa = f.createA();
    pb = f.createB();
    pa.show();
    pb.use();
  }
}

图示
image

参考

[1]. 刘伟, 设计模式. 2011.

标签:implements,ProductB,ProductA,工厂,public,抽象,new,class,04
From: https://www.cnblogs.com/xdreamc/p/16459371.html

相关文章

  • 建设数字工厂:生产物料齐套检查的实现方法
    摘要: 本期介绍如何在华为云数字工厂平台上,通过扩展配置生产工单的信息模型和逻辑流程模型,实现在生产工单下发前,轻松透视生产物料齐套状况。本文分享自华为云社区《数字工厂深入浅出系列(四):生产物料齐套检查的实现方法》,作者:云起MAE。随着市场个性化需求不断发展,多品种小批量生......
  • Loj #6041. 「雅礼集训 2017 Day7」事情的相似度
    做到这题,发现自己对\(SAM\)的一些性质还不知道,特此记录。题目要求01字符串区间内前缀的最长公共后缀由SAMparenttree性质可知,2个前缀的最长公共后缀就是它们在parenttree上lca的len值如何去感性理解我们知道,在parenttree上每个节点都代表了一个endpos等价类,由后缀链接将他......
  • odoo16.0源码安装Ubuntu22.04环境
    同样使用的OS是ubuntu22.04,通过vbox虚拟机来进行测试安装。一、安装好虚拟环境以后,先更新一下当前系统sudoapt-getupdate&&sudoapt-getupgrade二、安装odoo运行环境依赖包、node.js包安装工具,以及rtlcss包sudo apt-get install npmxfonts-encodingsxfonts-utilspy......
  • Ubuntu22.04安装odoo16.1alpha
    Odoo16.0马上就要发布了,官网上的odoo16.1也已经开放下载。作为老odoo粉,当然也想尝鲜一下。经过在虚拟机多次测试,通过source安装比较困难,各种python模块包版本总是不太兼容。后来改用deb包就比较简单了。只要三步走就可以拥有全新的odoo16.1测试环境。一、我下载的是ubuntu-22.04......
  • Niushop的PC端404出问题
    路径错误的话,看图,如果是网页正常打开,但是刷新就出错,那么配置文件没配置好 location/web{try_files$uri$uri/web//web/index.html;}   ......
  • 谈抽象类与接口的区别之一
    评:谈抽象类与接口的区别之一一、抽象类:抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的......
  • ubuntu2204脚本初始化集群
    @目录脚本实现脚本测试用于一键部署集群(多节点)的环境初始化,如修改主机名,主机映射,节点相互免密,时间同步等,可多节点部署ps:脚本需要下载sshpass,chrony等软件包,确保ubuntu源正常脚本实现#!/bin/bash#定义节点信息NODES=("192.168.200.180controllerroot""192.168.200.182c......
  • AGC043
    AGC043A.RangeFlipFindRoute简单DPB.123Triangle推性质。利用模运算将减法变成加法(在绝对值0/1的情况下)。GiantGraph类似于博弈论的东西。首先考虑\(n^2\)建图的做法,在考虑不建图,利用虚建边的形式做。参考:题解AT5800【[AGC043C]GiantGraph】-Kewth的洛谷博......
  • 升级Ubuntu18.04上的gitlab 13.7.3
    1、查看gitlab版本,在首页后面添加/help就可以看到了也可以用命令查看cat/opt/gitlab/embedded/service/gitlab-rails/VERSION2、gitLab版本升级,需要按照官方的指示版本进行依次升级8.11.Z->8.12.0->8.17.7->9.5.10->10.8.7->11.11.8->12.0.12->12.1.17->12.10.1......
  • leetcode 104. 二叉树的最大深度(java实现)
    104.二叉树的最大深度标题解法标题给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。解法publicclassSolution{publicintmaxDepth(TreeNoderoot){//如果节点为空,返回深度为0......