Android架构进阶(三)——工厂模式系列

[最全]设计模式实战(三)工厂&抽象工厂&策略 聊聊工厂方法、抽象工厂和策略模式。在安卓中,对应的分别是:Android onCreate、MediaPlayer创建和动画插值器Interpolator。 阅读详情

工厂模式

简单工厂模式

定义一个用于创建对象的接口,让子类决定实例化哪个类(也可以叫做静态工厂模式)

1. 角色说明

  • 产品:需要创建的复杂对象(一般为interface/abstract形式)。
  • 具体产品:产品的具体实现。
  • 工厂类:根据入参返回产品的具体实现。

2. 实例演示

产品

	public abstract class Product{
		public abstract void a();
		public abstract void b();
	}

产品实现类

/**
 * 具体产品A
 */
public class ProductA extends Product{
	
	@Override
	public void a(){
		System.out.println("PA a");
	}
	
	@Override
	public void b(){
		System.out.println("PA b");
	}
}

/**
 * 具体产品B
 */
public class ProductB extends Product{
	
	@Override
	public void a(){
		System.out.println("PB a");
	}
	
	@Override
	public void b(){
		System.out.println("PB b");
	}
}

工厂类

public class Factroy{
	public static Product create(String type){
		Product p = null;
		switch(type){
			case "A":
				p = new ProductA();break;
			case "B":
				p = new ProductB();break;
			default :
		}
		return p;
	}
}

3.使用

我们这里使用工厂类的create方法,根据传入的参数的不同,生成不同的产品。

public class test{
    public void test(){
	    Factory.create("A").a();
	    Factory.create("B").b();
    }
}

Output

PA a
PB b

4.总结

  • 我们生成复杂对象时,当我们确定只使用一个工厂类的时候,我们可以使用简单工厂模式。
  • 简单工厂模式可以把创建实例的过程与使用实例分开,降低代码的耦合度,尤其时当实现类需要大量设置参数的时候(也就是我们new一个对象之后要set很多参数的实例),使用这个实例时我们就不用关心这个对象是如何创建的了
  • 像第一条所说,我们只能有一个工厂类,而且我们使用的静态创建方法,不能被继承和重写,这就导致我们如果要添加新的产品必须修改工厂类逻辑,是得工厂类过于复杂,一旦工厂类出错,则会影响整个系统,这违背了开闭原则。(这也就是简单工厂的弊端)

工厂方法模式

定义一个接口用来创建对象,让他的子类去决定实例化哪个类。

1.角色说明

  • 抽象产品:定义对象的公共接口用来创建复杂对象
  • 具体产品:实现接口
  • 抽象工厂:包含一个方法用来返回抽象产品的对象
  • 具体工厂:返回具体产品。

2.实例演示

定义抽象产品

public abstract class Product{
	public abstract void deal();
}

具体产品实现

    public class ProductA extends Product {
        @Override
        public void deal() {
            System.out.println("product A");
        }
    }

    public class ProductB extends Product {
        @Override
        public void deal() {
            System.out.println("product B");
        }
    }

抽象工厂

	public abstract class Factory {
        public abstract Product create();
    }

具体工厂实现

	public class FactoryA extends Factory {
        @Override
        public Product create() {
            return new ProductA();//创建ProductA
        }
    }
    
    public class FactoryB extends Factory {
        @Override
        public Product create() {
            return new ProductB();//创建ProductB
        }
    }

3.使用

public class test{
	public void test() {
        Factory factoryA = new FactoryA();
        Product productA = factoryA.create();
        productA.deal();
        
        Factory factoryB = new FactoryB();
        Product productB = factoryB.create();
        productB.deal();
    }
}

Output

product A
product B

4.总结

  • 工厂方法模式符合开闭原则,符合单一职责原则,每个工厂都只负责对应的产品
  • 由于一个工厂只能创建一个产品没所以当新增产品时,就需要新增相应的工厂类,导致系统负责度和性能开销,引入抽象类也会导致类结构的复杂化

抽象工厂模式

提供一个接口去创建一组相关或者相互依赖的对象,不用去制定他们的具体类。

1.角色说明

  • 抽象产品:提供一个公共接口
  • 具体产品:一个具体的产品,实现抽象产品接口。
  • 抽象工厂:提供一个抽象类去定义一些创建产品的方法。
  • 具体工厂:实现抽象工厂中定义的创建产品的方法,每一个具体工厂对应生产一种具体产品。

2.实例演示

抽象公共接口

public abstract class Guitar{
	public abstract void getGuitar();
}
public abstract class Bass{
	public abstract void getBass();
}
public abstract class Drum{
	public abstract void getDrum();
}

具体产品实现

public class ESP extends Guitar{
	 @Override
	 public void getGuitar() {
            System.out.println("Guitar:ESP");
     }
}
public class Fender extends Guitar{
	@Override
	public void getGuitar() {
            System.out.println("Guitar:Fender");
	}
}
public class ESP extends Bass{
	 @Override
	 public void getBass() {
            System.out.println("Bass:ESP");
     }
}
public class Fender extends Bass{
	@Override
	public void getBass() {
            System.out.println("Bass:Fender");
	}
}
public class Roland extends Drum{
	 @Override
	 public void getDrum() {
            System.out.println("Drum:Roland");
     }
}
public class Gretsch extends Drum{
	@Override
	public void getDrum() {
            System.out.println("Drum:Gretsch");
	}
}

抽象工厂

public abstract class BankFactory{
	public abstract Guitar createGuitar();
	public abstract Bass createBass();
	public abstract Drum createDrum();
}

具体工厂类

public class PopBankFactory extends BankFactory{
	@Override
    public Guitar createGuitar() {
        return new Fender();
    }
    
    @Override
    public Bass createBass(){
    	return new Fender();
    }
    
    @Override
	public Drum createDrum(){
		return new Gretsch();
	}
}

public class RockBankFactory extends BankFactory{
	@Override
    public Guitar createGuitar() {
        return new ESP();
    }
    
    @Override
    public Bass createBass(){
    	return new ESP();
    }
    
    @Override
	public Drum createDrum(){
		return new Roland();
	}
}

3.使用

这里我们就可以根据不同的需要生产特定的组合产品了。

public class test{ 
    public void test(){
	    System.out.println("--------------------组建一支摇滚乐队-----------------------");
	    RockBankFactory rockBand = new RockBankFactory();
	    rockBand.createGuitar().getGuitar();
	    rockBand.createBass().getBass();
	    rockBand.createDrum().getDrum();
	
	    System.out.println("--------------------组建一支流行乐队-----------------------");
	    PopBankFactory popBand = new PopBankFactory();
	    popBand.createGuitar().getGuitar();
	    popBand.createBass().getBass();
	    popBand.createDrum().getDrum();
    }   
}

Output

--------------------组建一支摇滚乐队-----------------------
Guitar:ESP
Bass:ESP
Drum:Gretsch
--------------------组建一支流行乐队-----------------------
Guitar:Fender
Bass:Fender
Drum:Roland

4.总结

  • 一般抽象工厂模式都是适用于生产多个产品的组合对象时使用
  • 抽象工厂模式可以有多个工厂类,有点与简单工厂相同,不过他可以提供多个产品对象,而不是单一的产品对象
  • 如果新增产品,则依然需要修改抽象工厂和具体的工厂类,依旧违反开闭原则
Android开发设计模式之——工厂模式 在android中用到了很多的工厂类,如ThreadFactory创建抽象Runnable 。下面通过简单的例子来学习工厂模式。 一、作用 工厂模式(Factory Method):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。从而使一个类的实例化延迟到其子类。 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 阅读详情

相关推荐

Java 工厂模式在 Android 开发中的应用

本文旨在帮助 Android 开发者深入理解 Java 工厂模式,并掌握如何将其应用到 Android 开发中。我们将涵盖工厂模式的基本概念、不同类型的工厂模式(简单工厂、工厂方法、抽象工厂),以及在 Android 项目中如何使用这些模式来创建对象、提高代码的可维护性和可扩展性。本文将按照以下结构展开:首先介绍工厂模式的核心概念和不同类型,然后通过故事引入的方式解释这些概念。接着讲解核心概念之间的关系,并给出原理和架构的文本示意图以及 Mermaid 流程图。

AI开发架构师 1113

Android 进阶之路:常见设计模式之工厂模式

想成为高级Android工程师其中熟悉常见的设计模式是必不可少的,这个也是我面试一线互联网公司的深刻体会,首先我们现在介绍最基础也是最常用的设计模式:工厂模式

li_xianyuan的博客 266

工厂模式的三种写法

工厂模式在开发中用处是很多的,这里包含了工厂模式的三种写法,有兴趣可以来看看。

Android设计模式之一个例子让你彻底明白工厂模式(Factory Pattern)

提出疑问这几天研究工厂模式的时候,看到网上的一些文章中举的例子我就很疑惑,我相信这也是许多人的疑惑:工厂模式的功能就是创建实例,我们创建实例直接new不就完了吗,干嘛还得再封装一层工厂类,然后用工厂类再去new出这个实例?这不多此一举吗?比如我看到这样的例子,我们的用户分为金牌用户和银牌用户,我们要创建一个金牌用户或者银牌用户。定义一个用户接口public interface ICustomer {

阿拉灯神灯的专栏 1万+

Android工厂模式简单实现demo(含注释)

Android工厂模式简单实现demo(含注释),同步博文:http://blog.youkuaiyun.com/qq_28690547/article/details/50660376

LDA主题模型简介及Python实现

一、LDA主题模型简介 LDA主题模型主要用于推测文档的主题分布,可以将文档集中每篇文档的主题以概率分布的形式给出根据主题进行主题聚类或文本分类。 LDA主题模型不关心文档中单词的顺序,通常使用词袋特征(bag-of-word feature)来代表文档。词袋模型介绍可以参考这篇文章:文本向量化表示——词袋模型 - 知乎 了解LDA模型,我们需要先了解LDA的生成模型,LDA认为一篇文章是怎么形成的呢? LDA模型认为主题可以由一个词汇...

weixin_41168304的博客 20万+

Android 工厂模式,三种工厂模式的理解

工厂模式是一种创建者模式,在任何生成复杂对象的地方都可以使用工厂模式。理论来说在任何使用A a = new A()的方式都可以使用工厂模式,虽然使用工厂模式可能需要多做一些工作,但是在后续的开发和维护都带来了方便。如果我们需要在构建对象的时候,需要做很多的处理工作,比如初始化工作,查询工作等一些耗时的工作,如果我们将这些操作全部放入到构造方法中去写,那么势必在后期维护的带来不方便

Rrtoyewx 2万+

移动端UI自动化测试新框架Maestro:声明式语法与实战指南

UI自动化测试是保障移动应用质量的关键环节,其核心原理是通过脚本模拟用户操作,对应用界面进行自动验证。传统命令式框架(如基于Selenium WebDriver的Appium)虽然控制粒度细,但脚本编写和维护成本较高。声明式测试框架则通过描述“做什么”而非“怎么做”,显著降低了技术门槛和维护复杂度,其技术价值在于提升测试脚本的可读性、编写效率与跨团队协作能力。在移动端测试领域,这尤其适用于需要快速验证核心业务流程、进行冒烟测试和回归测试的场景。本文聚焦的**Maestro框架**,正是这一理念的杰出实践。它

weixin_32921023的博客 713

Android设计模式系列--工厂方法模式

先抽象的产品类,抽象的工厂类,然后用客户端具体的工厂生产相应的具体的产品,但是客户端并不知道具体的产品是怎么生产的,生产的过程封装在工厂里。所以说,某种程度上,工厂方法模式改变了我们直接用new创建对象的方式,一个很好的开始,意义重大。只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。这张图其实和原本的结构图有细微的区别,那就是参数化得工厂,而且从业务意义上也有些不同,但是思想是一样的。

2401_84519907的博客 727

七步设计高频变压器

七步设计高频变压器

m0_71394959的博客 5404

「模型部署系列」ubuntu 使用vllm部署Qwen3-8B模型

解决这个问题的方法正如错误信息中所提示的,需要在命令行中显式地设置。下载单个文件到指定本地文件夹(以下载README.md到当前路径下“dir”目录为例)解决:这表明你正在使用的 Tesla T4 GPU 的计算能力为 7.5,而。,用于获取更详细的 NCCL 调试信息,当所有其他问题排除,可尝试增加。1、下载vllm v0.8.5(此处已经下好了,去仓库拉资源)在下载前,请先通过如下命令安装ModelScope。,这一错误最终致使引擎进程启动失败。更多更丰富的命令行下载选项,可参见。

汪依帆的博客 5046

设计模式-工厂模式-3种-以手机制造工厂为例

超级链接: Java常用设计模式的实例学习系列-绪论 参考:《HeadFirst设计模式》 1.工厂模式存在的意义 工厂存在的意义是:高效的制造某一类产品。 工厂模式存在的意义是:高效的创建某一类对象。 工厂模式有很多种,本文只介绍以下三种: 简单工厂模式,又称静态工厂模式。 工厂方法模式,全称多个工厂方法模式。 抽象工厂模式。 本文以`手机制造工厂生产手机为场景来学习工厂模式。 手机有两...

韩超的博客 (hanchao5272) 4906

Protobuf NDK以及QNX交叉编译

Protobuf 用处很广,尤其是通讯数据序列化,反序列化。TODO。

静虚待令,有物混成 1560

Android设计模式——工厂模式和抽象工厂模式

针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!Android前沿技术大纲全套体系化高级架构视频Android高级架构资料、源码、笔记、视频。

2401_84519718的博客 401

Source Insight 4.0 及最新版序列号验证机制全解析:如何快速定位关键函数并构造有效Key

本文深入解析了Source Insight 4.0及最新版的序列号验证机制,详细介绍了如何快速定位关键函数并构造有效Key。通过静态分析和动态调试技术,帮助开发者理解现代软件保护的设计哲学,掌握逆向分析方法论,提升安全研究能力。

weixin_26642481的博客 427

PLDM实战解析:传感器与效应器在智能监控系统中的应用

本文深入解析了PLDM(平台级数据模型)中传感器与效应器两大核心组件在智能监控系统中的应用。传感器负责感知硬件状态,分为数值型与状态型,提供精准的“体检报告”;效应器则负责执行控制指令,实现从监控到操作的闭环。文章通过实战案例,阐述了如何利用这些标准化组件构建高效、自动化的智能监控系统,并探讨了平台描述记录与事件机制等关键技术。

k6l7m8n9的博客 874

Android工厂模式

工厂模式分为三种 :简单工厂模式 、工厂方法模式 、抽象工厂模式 。 一. 简单工厂模式 简单工厂模式又叫静态方法模式(因为工厂类定义了一个静态方法);简单工厂模式可以理解为负责生产对象的一个类,称为“工厂类”。 简单工厂模式属于创建型模式 。 简单工厂模式角色说明: Product(抽象产品类):要创建的复杂对象,定义对象的公共接口。 ConcreteProduct(具体产品类):实...

pengpenggege_lp的博客 1765

【CANoe示例分析】SOMEIPWithvCDL_16

本示例来源于官方提供的示例工程:0004_基于vCDL实现SOMEIP通信_Demo\0004_基于vCDL实现SOMEIP通信_Demo\SOMEIPWithvCDL。

jasonj333 569

Android常用设计模式之工厂模式理解

设计模式之工厂模式

qq_36639105的博客 2830

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

安卓设计模式之工厂模式

/ 输出: Android按钮被点击。System.out.println("渲染Android风格按钮");System.out.println("Android按钮被点击");System.out.println("Android文本框");System.out.println("渲染iOS风格按钮");System.out.println("iOS按钮被点击");System.out.println("显示警告对话框");System.out.println("iOS文本框");

sinat_33250050的博客 710

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android设计模式—工厂模式

工厂模式是一种创建者模式,是我们常用的模式之一,多用于需要生成复杂对象的地方。理论来说在任何使用A a = new A()的方式都可以使用工厂模式,虽然使用工厂模式可能需要多做一些工作,但是在后续的开发和维护都带来了方便。 工厂模式降低了对象之间的耦合度,由于工厂模式依赖抽象的架构,实例化的任务交由子类去完成,所以有很好的扩展性。 工厂模式分为三类: ①简单工厂模式 ②工厂方法模式 ③抽象工厂模式 三者之间的区别: ①工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 ②工厂方法模式的具体工厂类只能创建

zenmela2011的专栏 2847

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Android设计模式之工厂模式与使用场景

在Android开发中,工厂模式是一种创建型设计模式,它将对象的创建和使用分离,通过工厂类来负责创建对象。这种模式可以提高代码的可维护性和可扩展性,尤其适合复杂对象的创建过程。下面详细介绍工厂模式的类型、实现和典型应用场景。通过合理使用工厂模式,可以提高代码的可维护性、可扩展性和可测试性。在实际开发中,需根据对象复杂度和变化频率选择合适的工厂模式实现。

分享技术和日常 856
上一篇: Android架构进阶(二)—— 面向对象设计原则与23种设计模式
下一篇: Android架构进阶(四)—— 单例模式
豪利丶王
博客等级 码龄11年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值