项目实战(应用市场)----FragmentFactory

23种设计模式-工厂模式(安卓应用场景介绍) 工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,而无需将具体的对象创建逻辑暴露给客户端。在Java中,工厂模式常常用于创建复杂对象或对象的构造过程涉及到多个步骤的情况。 阅读详情
import android.support.v4.app.Fragment;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by zlr on 2014/7/19.
 */
public class FragmentFactory {
	public static final int TAB_HOME = 0;
	public static final int TAB_APP = 1;
	public static final int TAB_GAME = 2;
	public static final int TAB_SUBJECT = 3;
	public static final int TAB_RECOMMEND = 4;
	public static final int TAB_CATEGORY = 5;
	public static final int TAB_TOP = 6;

	private static Map<Integer, BaseFragment> mFragmentCache = new HashMap<Integer, BaseFragment>();

	public static Fragment createFragment(int position) {

		BaseFragment fragment = mFragmentCache.get(position);
		if (fragment != null) {
			return fragment;
		}
		switch (position) {
			case TAB_HOME:
				fragment = new HomeFragment();
				break;
			case TAB_APP:
				fragment = new AppFragment();
				break;
			case TAB_GAME:
				fragment = new GameFragment();
				break;
			case TAB_SUBJECT:
				fragment = new SubjectFragment();
				break;
			case TAB_RECOMMEND:
				fragment = new RecommendFragment();
				break;
			case TAB_CATEGORY:
				fragment = new CategoryFragment();
				break;
			case TAB_TOP:
				fragment = new TopFragment();
				break;
		}
		mFragmentCache.put(position, fragment);
		return fragment;
	}
}

简单工厂模式

简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。 

      先来看看它的组成: 
         1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。
         2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。         

         3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。 


工厂方法模式

       工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。 

工厂方法模式组成:
1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。 
       2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。 
       3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。 
       4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
缺点: 可以看出工厂方法的加入,使得对象的数量成倍增长。当产品种类非常多时,会出现大量的与之对应的工厂对象,这不是我们所希望的。因为如果不能避免这种情 况,可以考虑使用简单工厂模式与工厂方法模式相结合的方式来减少工厂类:即对于产品树上类似的种类(一般是树的叶子中互为兄弟的)使用简单工厂模式来实 现。

工厂方法小结: 

        工厂方法模式仿佛已经很完美的对对象的创建进行了包装,使得客户程序中仅仅处理抽象产品角色提供的接口。那我们是否一定要在代码中遍布工厂呢?大可不必。也许在下面情况下你可以考虑使用工厂方法模式: 
     1)当客户程序不需要知道要使用对象的创建过程。 
     2)客户程序使用的对象存在变动的可能,或者根本就不知道使用哪一个具体的对象。


优化简单工厂模式:

简单工厂模式与工厂方法模式真正的避免了代码的改动了?没有。在简单工厂模式中,新产品的加入要修改工厂角色中的判断语句;而在工厂方法模式中,要么将判 断逻辑留在抽象工厂角色中,要么在客户程序中将具体工厂角色写死(就象上面的例子一样)。而且产品对象创建条件的改变必然会引起工厂角色的修改。
       面对这种情况,我们可以使用反射机制:

抽象工厂模式 

随着客户的要求越来越高,宝马车需要配置空调。于是这个工厂开始生产宝马车和配置需要的空调。这时候工厂有二个系列的产品:宝马车和空调.宝马车必须使用对应的空调才能使用.这时候分别使用一个车工厂和一个空调工厂都不能满足我们的需求,我们必须确认车跟空调的对应关系。因此把车工厂跟空调工厂联系在一起。因此出现了抽象工厂模式。
     可以说,抽象工厂模式和工厂方法模式的区别就在于需要创建对象的复杂程度上。而且抽象工厂模式是三个里面最为抽象、最具一般性的。 
抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足一下条件:
     1)系统中有多个产品族,而系统一次只可能消费其中一族产品。 
     2)同属于同一个产品族的产品以其使用。 
抽象工厂模式的各个角色(和工厂方法一样): 
     1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。 
     2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
     3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。
     4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。


我的应用市场 电子应用市场,具体实现, 立即下载

相关推荐

glibc手动升级高版本导致系统(RedHat/Centos)异常(无法开机等)的解决方法(回退低版本glibc)

我的系统是Redhat7.6, 理论上Redhat7/Centos7都可以使用该方法解决问题。 首先慎重提醒各位:glibc升级会产生无法预料的后果!由于Android NDK需要高版本的glibc才可以使用,所以作死手动去更新了glibc2.18,使得重启系统后图形界面消失。(Redhat/Centos升级此类安装包最好用yum升级,因为系统内的程序对他们的依赖很大,升级会导致大部分程序无法使用...

weixin_42881528的博客 9698

【Android】FragmentFactory介绍:构建Fragment的好帮手

为什么需要FragmentFactory 有Fragment使用经验的人都知道,Fragment必须有有一个空参的构造函数,否则打包时会提示一下错误: This fragment should provide a default constructor (a public constructor with no arguments) 在添加了空参构造器之后,如果定义了任何带参数构造器,仍然会亲切的提示: This fragment should provide a default constructor

移动端开发干货分享 2649

GitLab社区版vs企业版:本地部署性能对比与选型建议(含实测数据)

本文深入对比GitLab社区版(CE)与企业版(EE)在本地部署中的性能差异与功能特性,提供实测数据与选型建议。测试显示EE版在并发克隆、CI流水线启动等场景性能提升显著,尤其适合需要高级安全合规与CI/CD功能的团队。文章还包含硬件配置指南与成本效益分析,帮助技术决策者做出明智选择。

weixin_28828243的博客 295

FragmentFactory介绍:构建Fragment的好帮手

1. 为何需要FragmentFactory 关于Fragment的使用约定 有Fragment使用经验的人都知道,Fragment必须有有一个空参的构造函数,否则打包时会提示一下错误: This fragment should provide a default constructor (a public constructor with no arguments) 在添加了空参构造器之后,如果定义了任何带参数构造器,仍然会亲切的提示: Avoid non-default construct..

chuyouyinghe的专栏 639

【教程】BM1684X-32边缘计算盒子 网络配置教程

BM1684X边缘计算盒子网络配置教程

ShiMetaPi的博客 715

【推荐100个unity插件】帮助你快速开发一款FPS游戏—— FPS Framework

FPS Framework 快速入门指南 FPS Framework 是一个 Unity 开发框架,可加速 FPS 游戏开发。主要功能包括: 第一人称控制器:基于 Character Controller 实现,提供移动、跳跃、下蹲等功能,支持自定义参数调整 渲染管线转换:内置 RP 转换器,支持 URP/HDRP 等渲染管线一键切换 库存系统: 采用双列表管理:物品列表(Items)和可收集物列表(Collectables) 支持自定义库存物品和可收集物类型 提供拾取/丢弃功能实现 快速开始: 通过预制件

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2571

Fragment的使用(二)-FragmentFactory

FragmentFactory与FragmentContainerView

Mr_Tony的专栏 1190

解决Gradle中NPM命令失效问题

摘要:本文分析了IntelliJ IDEA中Gradle执行npm命令失败的问题,报错显示"npm"文件不存在。通过确认npm安装路径、检查系统PATH与Gradle环境的差异,提出两种解决方案:1) 在build.gradle中使用npm绝对路径;2) 通过launchctl修改用户PATH。实例展示了如何修改Gradle脚本或系统配置来解决该问题,指出跨平台开发中环境变量配置的重要性。文章为开发者提供了处理类似问题的实用方法。

2501_90323865的博客 91

androidfragmentfactory

Fragments provide core Android app functionality. With the introduction of AndroidX in Android Jetpack, fragments got an overhaul and under the covers, the internals for fragment instantiation have ch...

weixin_26707115的博客 395

【32】软考软件设计师——算法题(一):分治法与动态规划深度精讲|下午第4题常考满分攻略

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第32篇,正式开启**模块四:应用技术(下午题)算法大题专项**,聚焦下午第4道高频必考大题核心两大算法:分治法与动态规划。全文超4000字深度拆解两大经典算法的底层核心思想、算法策略识别技巧、递归边界设计、状态转移方程推导,全覆盖代码填空高频考点、时间复杂度分析、经典题型解题套路;配套可直接默写的递归代码模板、DP状态设计范式、真题完整填空案例,彻底解决考生分不清分治与DP、递归边界写错、状态转移推不出、复杂度算不对四大核心痛点。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 639

AI Agent开发第84课-paddleocr-vl全网唯一最全本地化布署教程

本文详解 PaddleOCR-VL 本地化布署全过程,指出为何在真实生产环境中 PaddleOCR-VL 更稳定、更易部署、更贴近工程落地。同时还会详细比较与 DeepSeek-OCR 的核心差异,为全网独家介绍paddleocr-vl的本地部署实战指南。

打造全国最全的AI Agent开发知识领域的博客 5968

Android---Fragment-的过去、现状与未来

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。下面是部分资料截图,诚意满满:特别适合有开发经验的Android程序员们学习。不论遇到什么困难,都不应该成为我们放弃的理由!如果你看到了这里,觉得文章写得不错就给个赞呗?《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》

2401_84132298的博客 835

基于MATLAB的最大重叠离散小波变换(MODWT)算法详解

最大重叠离散小波变换(Maximal Overlap Discrete Wavelet Transform, MODWT)是DWT的重要改进形式,由Percival和Walden等人在20世纪90年代系统提出并完善。MODWT通过消除下采样操作,采用样本平移不变的分解方式,解决了DWT的多个固有缺陷。MODWT的核心创新在于取消下采样环节。与DWT每级分解后对滤波输出进行二分下采样不同,MODWT在每一级都使用相同的滤波器,但通过插入零值的方式调整滤波器系数,保持每级系数数量与原始信号相同。

qq_42212808的博客 115

(笔记)关于FragmentNavigator中的instantiateFragment() deprecated的替代方案

1. 代码: FragmentFactory factory = mManager.getFragmentFactory(); fragment = factory.instantiate(mContext.getClassLoader(), className); 2.原因:(它建议开发者自定义工厂类来实例化Fragments,这个instantiateFragment() needed to maintain forward compatibility) /** * Inst

u011046452的博客 1551

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

简单三步!Butterfly主题CSS变量完全指南:让你的博客颜色随心换

你是否曾经为博客主题的颜色搭配而烦恼?想要个性化定制却不知从何下手?今天我们就来聊聊如何通过CSS变量轻松打造独一无二的Butterfly主题博客! Butterfly主题作为Hexo生态中最受欢迎的主题之一,以其优雅的设计和强大的定制能力赢得了众多博主的青睐。而CSS变量技术正是实现主题颜色动态切换的秘密武器,让你能够轻松管理颜色方案,实现实时预览效果,打造出真正属于自己的博客风格。 ##

gitblog_00868的博客 1106

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android中最简单有效的Fragment全局管理器(全新实现方式)

这篇文章专门用于讲述LevineUtils中的FragmentFactory,需要集成LevineUtils 1.FragmentFactory简介 FragmentFactory是利用apt技术,即通过注解的方式来管理整个应用中的自定义的Fragment,通过FragmentFactory对象的showFragment(String tag)方法来控制fragment的显示和隐藏,从而实现...

qq_27876841的博客 855

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 管理fragment,Android中全局管理Fragment的FragmentFactory

这篇文章专门用于讲述LevineUtils中的FragmentFactory,需要集成LevineUtils1.FragmentFactory简介FragmentFactory是利用apt技术,即通过注解的方式来管理整个应用中的自定义的Fragment,通过FragmentFactory对象的showFragment(String tag)方法来控制fragment的显示和隐藏,从而实现了frag...

weixin_36081109的博客 538

【Android -- Material Design】BottomNavigationView 的基本使用

MaterialDesign 设计风格之 BottomNavigationView

Kevin Learn Android 2045

Fragment 这些 API 已废弃,你还在使用吗?

盘点 Fragment 被废弃的 API:onActivityCreated,startActivityForResult,setTargetFragment,setRetainInsInstance

移动端开发干货分享 2094

java设计模式1——工厂方法模式(Factory Method)

工厂方法模式分为三种: 11、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: [java] view plaincopy public interface Sender {       public void Send();

忆、瞻的专栏 1375

FragmentFactory + Koin 实现Fragment依赖注入

FragmentFactory 允许开发者使用带参数的构造函数创建 Fragment, 能够在 dagger、koin 等DI 框架的使用场景中发挥作用。

移动端开发干货分享 1165

FragmentFactory工厂类

import com.shizhefei.fragment.BaseFragment; import java.util.HashMap; /** * Created by HP on 2018/5/30. */ public class FragmentFactory { private static HashMap<Integer, BaseFragment> mFragmentMap = new HashMap<>(16); // public...

xiaoerbuyu1233的博客 304

利用Factory模式实现Fragment切换优化

GIithub源码 准备用 Fragment 实现页面切换的效果,就去 Github 看了下别人的源码,发现他利用 Factory 模式进行了优化。下面我就把这种方法介绍给大家。开始下面我们就用边学边练的方式进行学习,首先打开你的 Android Studio,并新建一个 FactoryFragment 项目。创建三个 fragment,分别是 OneFragment,TwoFragment,Th

qq_33946059的博客 1063

Android Fragment的设计模式:工厂模式

一、概述:如果项目里有很多fragment,如果直接从各个菜单直接调用的话是不是显得很杂乱无章呢? 这时我们就得把相关有共性的fragment抽取出来,做成一个抽象类,封装好所有fragment的共有的方法 如果不是共有的方法,就做成抽象方法,由其实现的fragment去实现二、基类BaseFragment/** * @描述 fragment * @项目名称 App

lovoo的博客 3677

FragmentFactory

import android.support.v4.app.Fragment; import java.util.HashMap; public class FragmentFactory { private static HashMap<Integer, Fragment> savedFragment = new HashMap<Integer, Fragme...

weixin_30569001的博客 218

[Android开发]Fragment使用工厂模式和优化

现在的应用框架基本都会用到Fragment+ViewPager。 在我们创建多个Fragment的时候,或许我们应该用工厂模式来降低程序的耦合性。下面这段代码来自于一个ViewPaper的Adapter里面。@Override public Fragment getItem(int position) { return FragmentFactory.cre

陶程的博客 4247
上一篇: 网络访问频繁的项目---ThreadManager(线程池管理类)
下一篇: 项目实战(app应用市场)----重写View
linuxMinx
博客等级 码龄15年 195粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值