福田区住房和建设局网站网站要实名认证

news/2025/9/30 20:29:39/文章来源:
福田区住房和建设局网站,网站要实名认证,长春一大网站,如何评价一个网站做的是否好目录 1.概念2.结构3.实现4.优缺点5.使用场景6.模式扩展7.JDK 源码解析——Collection.iterator 方法 1.概念 #xff08;1#xff09;Java 设计模式——工厂方法模式中考虑的是一类产品的生产#xff0c;如畜牧场只养动物、电视机厂只生产电视机等。这些工厂只生产同种类产… 目录 1.概念2.结构3.实现4.优缺点5.使用场景6.模式扩展7.JDK 源码解析——Collection.iterator 方法 1.概念 1Java 设计模式——工厂方法模式中考虑的是一类产品的生产如畜牧场只养动物、电视机厂只生产电视机等。这些工厂只生产同种类产品同种类产品称为同等级产品也就是说工厂方法模式只考虑生产同等级的产品但是在现实生活中许多工厂是综合型的工厂能生产多等级种类 的产品如电器厂既生产电视机又生产洗衣机或空调大学既有软件专业又有生物专业等。 2本文要介绍的抽象工厂模式将考虑多等级产品的生产将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族下图所示横轴是产品等级也就是同一类产品纵轴是产品族也就是同一品牌的产品同一品牌的产品产自同一个工厂。具体来说抽象工厂模式是一种为访问类提供一个创建一组相关或相互依赖对象的接口且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。 3抽象工厂模式是工厂方法模式的升级版本它们之间有以下几个区别 粒度不同抽象工厂模式关注一族相关对象的创建一个工厂负责创建一族产品对象而工厂方法模式关注单个对象的创建每个工厂只负责创建一种产品。抽象程度不同抽象工厂模式具有更高的层次和更大的封装性它通过引入抽象工厂和具体工厂的概念将一族产品对象的创建交给抽象工厂来完成而工厂方法模式的抽象程度相对较低它通过定义一个工厂接口或抽象类来声明创建产品的方法然后具体工厂类会实现这个接口或抽象类来创建具体产品对象。关注点不同抽象工厂模式关注的是一族产品对象的创建它解决的是多个产品对象之间的组合问题确保一族产品对象能够相互协作而工厂方法模式关注的是单个产品对象的创建它解决的是产品扩展和变化的问题。扩展性不同抽象工厂模式的扩展性更强可以同时添加新的具体工厂和产品类以及扩展一族产品的组合方式而工厂方法模式的扩展性相对较低当需要添加新的产品时需要新增对应的具体工厂类和具体产品类。 综上所述抽象工厂模式和工厂方法模式在粒度、抽象程度、关注点和扩展性等方面存在差异。选择使用哪种模式取决于具体的业务需求和设计要求。如果需要创建一族相关的产品对象并确保这些产品对象能够相互协作可以考虑使用抽象工厂模式如果只需要创建单个产品对象并且希望能够轻松扩展和添加新的产品类可以选用工厂方法模式。 2.结构 抽象工厂模式的主要角色如下 抽象工厂 (Abstract Factory)提供了创建产品的接口它包含多个创建产品的方法可以创建多个不同等级的产品。具体工厂 (Concrete Factory)主要是实现抽象工厂中的多个抽象方法完成具体产品的创建。抽象产品 (Product)定义了产品的规范描述了产品的主要特性和功能抽象工厂模式有多个抽象产品。具体产品 (ConcreteProduct)实现了抽象产品角色所定义的接口由具体工厂来创建它同具体工厂之间是多对一的关系。 3.实现 现咖啡店业务发生改变不仅要生产咖啡还要生产甜点如提拉米苏、抹茶慕斯等要是按照工厂方法模式需要定义提拉米苏类、抹茶慕斯类、提拉米苏工厂、抹茶慕斯工厂、甜点工厂类很容易发生类爆炸情况。其中拿铁咖啡、美式咖啡是一个产品等级都是咖啡提拉米苏、抹茶慕斯也是一个产品等级拿铁咖啡和提拉米苏是同一产品族也就是都属于意大利风味美式咖啡和抹茶慕斯是同一产品族也就是都属于美式风味。所以这个案例可以使用抽象工厂模式实现。类图如下 部分核心代码如下 抽象工厂DessertFactory.java //抽象工厂类 public interface DessertFactory {//生产咖啡的功能Coffee createCoffee();//生产甜品的功能Dessert createDessert(); }具体工厂AmericanDessertFactory.java package com.itheima.patterns.factory.abstract_factory;//美式风味的甜品工厂可以生产美式咖啡和抹茶慕斯 public class AmericanDessertFactory implements DessertFactory{Overridepublic Coffee createCoffee() {return new AmericanCoffee();}Overridepublic Dessert createDessert() {return new Matchamousse();} }具体工厂ItalyDessertFactory.java //意大利风味甜品工厂可以生产拿铁咖啡和提拉米苏甜品 public class ItalyDessertFactory implements DessertFactory{Overridepublic Coffee createCoffee() {return new LatteCoffee();}Overridepublic Dessert createDessert() {return new Trimisu();} }Client.java public class Client {public static void main(String[] args) {//创建的是意大利风味甜品工厂对象ItalyDessertFactory factory new ItalyDessertFactory();//获取拿铁咖啡和提拉米苏甜品Coffee coffee factory.createCoffee();Dessert dessert factory.createDessert();System.out.println(coffee.getName());dessert.show();} }输出结果如下 拿铁咖啡 提拉米苏如果要加同一个产品族的话只需要再加一个对应的工厂类即可不需要修改其他的类。 4.优缺点 1优点 封装性强抽象工厂模式将一族相关产品的创建逻辑封装在一个工厂中客户端通过抽象工厂来创建产品对象无需关心具体的产品类有效降低了客户端与具体产品类之间的耦合性。产品族之间的一致性抽象工厂模式保证创建的产品对象属于同一产品族它们之间是相互匹配的因此能够保证创建的产品对象之间能够正常协作。灵活性高通过切换具体工厂可以在运行时创建不同的产品族使系统具有较高的灵活性和可扩展性。 2缺点 可扩展性受限增加新的产品等级结构新的抽象产品较为困难需要修改抽象工厂接口及其所有具体工厂的代码违背了开闭原则。复杂性增加随着产品族和产品等级结构的增多抽象工厂和具体工厂的数量会增加导致系统的复杂度增加。不易于单独新增产品想要添加单独的产品类需要修改抽象工厂接口及其所有具体工厂的代码。 5.使用场景 当需要创建的对象是一系列相互关联或相互依赖的产品族时如电器工厂中的电视机、洗衣机、空调等。系统中有多个产品族但每次只使用其中的某一族产品。如有人只喜欢穿某一个品牌的衣服和鞋。系统中提供了产品的类库且所有产品的接口相同客户端不依赖产品实例的创建细节和内部结构。 6.模式扩展 1可以通过工厂模式 配置文件的方式解除工厂对象和产品对象的耦合。在工厂类中加载配置文件中的全 类名并创建对象进行存储客户端如果需要对象直接进行获取即可。 2具体步骤如下 定义配置文件 bean.properties americancom.itheima.patterns.factory.config_factory.AmericanCoffee lattecom.itheima.patterns.factory.config_factory.LatteCoffee改进工厂类 package com.itheima.patterns.factory.config_factory;import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Properties; import java.util.Set;public class CoffeeFactory {//加载配置文件获取配置文件中配置的全类名并创建该类的对象进行存储//1.定义容器对象来存储咖啡对象private static HashMapString,Coffee map new HashMapString, Coffee();//2.加载配置文件只需要加载一次static {//2.1.创建Properties对象Properties properties new Properties();//2.2.调用properties对象中的load方法来加载配置文件InputStream is CoffeeFactory.class.getClassLoader().getResourceAsStream(bean.properties);try {properties.load(is);//从properties集合中获取全类名并创建对象SetObject keys properties.keySet();for (Object key : keys) {String className properties.getProperty((String) key);//通过反射技术创建对象Class clazz Class.forName(className);Coffee coffee (Coffee) clazz.newInstance();//将名称和对象存储到容器中map.put((String) key, coffee);}} catch (Exception e) {e.printStackTrace();}}//根据名称获取对象public static Coffee createCoffee(String name) {return map.get(name);} }测试 package com.itheima.patterns.factory.config_factory;public class Client {public static void main(String[] args) {Coffee coffee1 CoffeeFactory.createCoffee(american);System.out.println(coffee1.getName()); //美式咖啡Coffee coffee2 CoffeeFactory.createCoffee(latte);System.out.println(coffee2.getName()); //拿铁咖啡} }静态成员变量用来存储创建的对象键存储的是名称值存储的是对应的对象而读取配置文件以及创建对象写在静态代码块中目的就是只需要执行一次。 有关 Properties 类的具体知识可以参考 Java 基础——Properties 类这篇文章。 7.JDK 源码解析——Collection.iterator 方法 1首先来看一下这一段代码 public class IteratorDemo {public static void main(String[] args) {ListString list new ArrayList();list.add(Tom);list.add(Mike);list.add(Marry);//获取迭代器对象IteratorString iterator list.iterator();//使用迭代器遍历while(iterator.hasNext()){String element iterator.next();System.out.println(element);}} }大家应该很熟悉上面的代码它使用迭代器遍历集合获取集合中的元素。而单列集合获取迭代器的方法就使用到了工厂方法模式。现在通过类图来看其中的结构 Collection 接口是抽象工厂类ArrayList 是具体的工厂类Iterator 接口是抽象商品类ArrayList 类中的 Iter 内部类是具体的商品类。在具体的工厂类中 iterator() 方法创建具体的商品类的对象。 Iterator.java Collection.java ArrayList.java 注DateForamt 类中的 getInstance() 方法、Calendar 类中的 getInstance() 方法使用的也都是工厂模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业网站在ps里做吗wordpress 点击文章图片

第1章:引言 大家好,我是小黑,今天咱们要聊聊Lock Support。Lock Support是Java并发编程的一块基石,它提供了一种非常底层的线程阻塞和唤醒机制,是许多高级同步工具的基础。 为什么要关注Lock Support?线程…

自媒体网站源码google store

del dict[key] # 删除dict字典里的键值

题解:AT_abc311_h [ABC311Ex] Many Illumination Plans

题意:给出一棵树,每个节点有权值,重量和颜色,问对于每个子树 \(u\),选出一个包含 \(u\) 的虚树,满足重量之和 \(\le X\),相邻两个点颜色不同且权值和最大。 做法: 首先我们会一个非常平凡的 \(O(nX^2)\) 做法,…

怎么在阿里云服务器上建设网站网站数据模版

知识导航(就问全不全) 当学习 Vue.js 时,除了基本的 HTML、CSS 和 JavaScript 知识外,还有一些其他的技术和语法需要了解,例如 ES6 和 TypeScript。以下是您可能需要学习的一些基础知识和对应的学习资源,我…

上海网站设计图片新建网址

没有使用Windows经典风格的QTreeView或QTreeWidget显示如下: 使用Windows经典风格的QTreeView或QTreeWidget显示如下: 树展开时: 树未展开时: 可以看到: 未使用Windows经典风格时,QTreeView或QTreeWidget…

南阳网站建设aokuo做图网站有哪些

随着人工智能的迅猛发展,ChatGPT作为一种强大的自然语言处理模型,逐渐在学术界引起了广泛的关注。本文将探讨ChatGPT在学术写作中的应用,并分享使用ChatGPT进行学术写作时的一些经验和心得。 01 — ChatGPT在学术写作中的应用 1.文献综述和…

淮南移动网站建设深圳网站推广优化

区域代理的保护机制:在链动商城系统里设定的代理有唯一性,每个省只有一个省代,每个市只有一个市代,每个区县只有一个区县代。这样也是保护每个代理的收益权益。 区域代理包含的权益类别:购物奖励折扣;区域实…

品牌网站建设哪里有维影企业网站管理系统

基于springboot实现酒店客房管理平台系统演示 摘 要 随着人们的物质水平的提高,旅游业和酒店业发展的速度越来越快。近年来,市面上酒店的数量和规模都在不断增加,如何提高酒店的管理效率和服务质量成为了一个重要的问题。伴随着信息技术的发…

易语言如何做网站钦州建设网站

题目 给定长为n(n<2e5)的1-n的排列p&#xff0c; 求(i,j)(1<i<j<n)对的数量&#xff0c;满足gcd(i,j)≠1且gcd(pi,pj)≠1 思路来源 官方题解 题解 参考莫比乌斯函数mu&#xff0c;定义一个新函数&#xff0c; 新函数需要满足n1的时候对因子求和为0&#xff0…

现在流行的网站开发中关村在线

简介&#xff1a; 针对数据库连接池到DRDS连接探活的优化 1. 问题背景 近期在给某专有云客户进⾏云产品应⽤性能优化分析时&#xff0c;发现了⼀个有趣的关于DRDS使⽤层⾯的问题&#xff0c;这⾥给⼤家分享⼀下。 使⽤过DRDS产品的同学都知道在DRDS中&#xff0c;未分库分表的…

2025-9-27 提高组模拟赛 div2

比赛链接模拟赛 订正赛

idea 网站开发网站页面设计制作费

随着世界技术的迭代与发展&#xff0c;人工智能和机器学习正在超自动化领域&#xff0c;扮演着越来越重要的角色。2020年的冠状病毒疫情突发&#xff0c;整个世界都在防疫的道路上披荆斩棘。人工智能发挥了重大作用&#xff0c;智能测温、智能消毒、智能建设都能看到AI的影子。…

植物大战僵尸融合版下载安装教程【PC/安卓/iOS 完整攻略 + 常见问题解决】 - 详解

植物大战僵尸融合版下载安装教程【PC/安卓/iOS 完整攻略 + 常见问题解决】 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font…

合同范本的网站深圳戈麦斯网站开发

P3714 [BJOI2017]树的难题 求解树上长度在L到R的树链中颜色段权值和最大的链。 首先求解树上链的问题&#xff0c;而且限制了链的长度&#xff0c;那么我们需要点分治处理&#xff0c;然后考虑每次分治&#xff0c;我们可以把链分成两类&#xff0c;先处理同色连通块&#xf…

icp备案综合查询网站qq是哪家公司开发的软件

简介&#xff1a;Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表。 1、介绍 图 1.1 Apache ECharts 功能、运行环境 功能&#xff1a; ECharts&#xff…

两场div3 逆向思维

两场div3 逆向思维Posted on 2025-09-30 19:46 tttfred 阅读(0) 评论(0) 收藏 举报927div3 C 给你一个数列,和一个只含LR的操作序列s,若当前是L移除左端一个元素,若当前是R移除右端一个元素,问你每次所有元素…

详细介绍:(基于江协科技)51单片机入门:5.定时器

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

part2

T1很明显需要将 \(N\) 分解成 \(N = p_i ^ {Q_i}\)再很明显的是假如我们选了若干元素则满足条件的唯一性质为 \(\min(Q_{j,k}) = 0\) 且 \(\max(Q_{j,k}) = Q_k\) 最关键的也是这步容斥,我们用总数减去T2

SuperMap iObjects .NET 11i 二次开发(十五)—— 类型转换之面转点 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站服务器空间价格网站开发顶岗周记

打开vs2010 在工具选项中选择扩展管理器——联机库 安装WCF REST Service Template 40(CS)模板 安装后新建wcf服务应用程序&#xff0c;删除默认建立的文件。 新建RestWcf4HelpPage.svc&#xff0c;代码如下 using System; using System.Collections.Generic; using System.Lin…