工厂模式

PhoneFactory文件 通过调用系统底层打电话时可以隐藏拨号界面, 但需要此文件,从android源码中拷贝 立即下载

1、工厂模式的作用

工厂模式是用来创建对象的。但是,创建可以用new创建对象,为什么要用工厂模式呢?比如说我们创建一个Sample对象

Phone s=new Phone ();

看上去并没有什么不妥的地方啊,平常也一直这样写代码的。但是我们想想工作中如果Phone创建的时候要传入一个对象
那么代码可以写成这样

Phone s=new Phone (context);

如果再加一个呢?

Phone s=new Phone (context,tag1...);

如果这样说,并不麻烦啊,构造参数加就可以了。但是这只是一个简单的问题。如果我们在new的时候做一些操作呢比如加上赋值,查询操作,甚至是调用比较复杂的代码。那么我们就得把每一个new的地方都得修改。这样话,工作量是很大的。况且我们不能预测将来还会有什么改变。因此把new对象交给别人是非常重要的事情。另外,使用new 来创建对象本身也是一种耦合的代码,一处的变动可以影响到多个模块的使用(构造方法变动,调用的变动)。代码设计的规范一定要减少耦合度,这样才容易维护。

工厂模式的主要作用:
1、创建对象
2、代码解耦,模块化。
3、减少对象变动时带来的工作量,容易维护。

2、简单工厂模式

产品类

abstract class Phone {
    public Phone(){

    }
}
public class Androidphone extends Phone {
    public Androidphone() {
        System.out.println("安卓手机");
    }
}
public class Iosphone extends Phone {
    public Iosphone() {
        System.out.println("苹果手机");
    }
}

工厂类,工厂中根据不同的类型,生产不同的手机

public class Factory {
    public Phone creatPhone(int type) {
        switch (type) {

            case 1:
                return new Iosphone();

            case 2:
                return new Androidphone();

            default:
                break;
        }
        return null;
    }
}

测试类


public class SimpleFactivityTest {

    public static void main(String[] args) {
        Factory factory=new Factory();
        factory.creatPhone(1);
        factory.creatPhone(2);
    }
}

3、工厂模式

1、产品类

//抽象产品类
abstract class Phone {
    public Phone(){

    }
}
//具体产品:安卓手机
public class Androidphone extends Phone {
    public Androidphone() {
        System.out.println("im android phone");
    }
}
//具体产品:苹果手机
public class Iosphone extends Phone {
    public Iosphone() {
        System.out.println("im ios phone");
    }
}

2、工厂类

//抽象工厂类
public interface FactoryPhone {
    Phone createPhone();
}
//具体的工厂类:安卓手机
public class FactoryAndroid implements FactoryPhone {
    @Override
    public Phone createPhone() {
        return new Androidphone();
    }
}
//具体工厂类:苹果手机
public class FactoryIos implements FactoryPhone {
    @Override
    public Phone createPhone() {
        return new Iosphone();
    }
}

测试类


public class FactivityTest {

    public static void main(String[] args) {
    //生产安卓手机
        FactoryAndroid android=new FactoryAndroid();
        android.createPhone();
    //生产苹果手机
        FactoryIos ios=new FactoryIos();
        ios.createPhone();
    }
}

4、抽象工厂模式

1、产品类

产品类与上面一样

abstract class Phone {
    public Phone(){

    }
}
public class Androidphone extends Phone {
    public Androidphone() {
        System.out.println("abstract android phone");
    }
}
public class Iosphone extends Phone {
    public Iosphone() {
        System.out.println("abstract ios phone");
    }
}

2、工厂类

抽象工厂,抽象出所创建的对象

 abstract class AbstractFactory {
     abstract Androidphone getAndroid();
     abstract Iosphone getIos();
}

具体工厂,抽象工厂的具体实现

public class PhoneFactory extends AbstractFactory {
    @Override
    public Androidphone getAndroid() {
        return new Androidphone();
    }

    @Override
    public Iosphone getIos() {
        return new Iosphone();
    }
}

测试

public class AbstractFactivityTest {

    public static void main(String[] args) {
        PhoneFactory phoneFactory=new PhoneFactory();
        phoneFactory.getAndroid();
        phoneFactory.getIos();
    }
}

总结

简单工厂模式:在简单工厂中直接根据所有创建的产品类型不同,来new不同的对象,从同一个工厂中可以生产出android,ios类型的手机。

工厂模式:把简单工厂模式中的工厂职能分离,android工厂创建android类型手机,ios工厂创建ios类型的手机。

抽象工厂:把所要创建的手机抽象到工厂中,产生一个抽象工厂,在这个工厂的实现中,创建所需求的手机。

看了上面的解释,这三种工厂在什么情况下使用呢?
在一般情况下:简单工厂和工厂模式都可以满足我们的使用需求,工厂模式其实是简单工厂模式的一种更加解耦的方式。在实际中比较适合这种创建不同对象的工厂:比如说,这个工厂生产手机:一种类型的苹果手机,一种类型的安卓手机(注意是一种类型手机)

抽象工厂是用来给我们更复杂的场景使用的,这个对象创建可能比较复杂,工厂中创建的可能只是这一系列的产品,而不具体的产品,比如
这个工厂生产手机,生产苹果和安卓手机,但苹果(iphone6,7)android(华为,小米…)

VSCode+Keil高效开发STM32:Keil Assistant插件配置全攻略 本文详细介绍了如何通过VSCode的Keil Assistant插件,将Keil MDK的编译调试能力与VSCode的现代编辑体验相结合,打造高效的STM32开发环境。文章涵盖了从环境配置、工程导入、智能提示设置到与STM32CubeMX协同工作的全流程攻略,旨在解决Keil编辑器效率低下的痛点,大幅提升嵌入式开发的编码与项目管理效率。 阅读详情

相关推荐

从代码层面分析STM32 标准库和HAL库的差异

相当于每个设置都是独立的函数。HAL库将一段代码通过宏定义的方式封装成了一个函数,每个端口的时钟都单独的定义了一个名称,标准库是一个独立的函数,通过参数传递的方式来设置每个端口的时钟。这两个版本的函数本质上操作的还是寄存器,不过HAL库操作的只是BSRR寄存器,而标准库端口置1的时候操作的是BSRR寄存器,端口清0的时候操作的是BRR寄存器。标准库设置端口模式的时候,是在if语句中判断之后直接设置的,而HAL端口模式设置时,却使用了switch语句去设置,说明在HAL库中,端口模式和标准库中发生了改变。

HXYDJ的博客 2万+

Android设计模式—工厂模式

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

zenmela2011的专栏 2847

【向量数据库】Milvus向量数据库 ① 从入门到实战

Milvus是专为海量高维向量设计的开源数据库,支持AI搜索、图像识别、推荐系统等场景。相比传统关系型数据库(如PostgreSQL),它更高效处理语义检索、非结构化数据存储,可毫秒级响应亿级向量查询。单机场景下,推荐配置8GB内存/32GB硬盘,支持FAISS/HNSW等索引算法,支持GPU加速。本文涵盖优快云专属部署教程(CentOS脚本/配置调优),提供避坑指南与扩展资源,并对比分析与传统数据库差异。适合算法工程师、AI开发人员快速上手,附官方下载与性能测试技巧,手把手教你搭建高效向量检索系统!

xiezhiyi007的专栏 1585

Android常用设计模式-工厂模式

工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,而不需要将对象的创建过程暴露给客户端。在 Android 应用程序开发中,工厂模式经常被用来创建一些常用的组件,比如对话框、菜单、按钮等。在 Kotlin 中,我们可以使用 companion object 关键字来实现工厂模式。通过在 companion object 中定义工厂方法,可以方便地创建对象,而不需要将对象的创建过程暴露给客户端。工厂模式的优点包括隔离复杂的对象创建逻辑,提供灵活的扩展能力,以及统一管理对象创建过程。

android_Mr_夏 1078

告别GPS,用Sentinel-1数据+Python实战SBAS-InSAR监测城市地面沉降(保姆级教程)

本文详细介绍了如何利用Sentinel-1数据和Python实现SBAS-InSAR技术监测城市地面沉降。通过保姆级教程,从环境配置、数据获取到干涉处理、时序分析和形变反演,逐步解析全流程技术细节,帮助读者掌握毫米级精度的形变监测方法,并以上海陆家嘴区域为例展示实际应用效果。

weixin_32771907的博客 534

【上海大学计算机组成原理实验报告】七、程序转移机制

学习实现程序转移的硬件机制//掌握堆栈寄存器的使用//手动方式实现子程序调用转移过程//手动方式实现子程序返回转移过程//编程实现`OUT`寄存器交替显示`11`和`55`//若要求`11`和`55`各显示`50`次后停机,应该如何修改程序?//根据实验指导书的相关内容,实验箱系统的程序转移硬件机制在于,当`LDPC`有效时,如果此时`DUBS`上的值就是转移的目标地址,则此目标地址被打入`PC`,从而实现程序的转移;若`LDPC`为`0`是附带条件的,就形成“条件转移”。

HackerKevon的博客 2471

Android工厂模式

工厂模式分为三种 :简单工厂模式 、工厂方法模式 、抽象工厂模式。

z936689039的博客 1264

不写代码,Cursor 10分钟开发1个APP!保姆级教程喂饭来了

做出第一个能运行的app,那种成就感真的很棒。虽然过程可能有点折腾,但只要耐心一点,问题都能解决。记住,遇到问题不要慌,现在有AI帮忙,大部分问题都能快速解决。重要的是迈出第一步,开始动手实践。你的第一个app可能很简单,但这是一个很好的开始。随着经验积累,你能做出的东西会越来越酷。现在就开始行动吧,说不定下个月你就能向朋友炫耀你自己做的app了!

chenhong007的博客 1548

JAVA设计模式之工厂模式(三种工厂模式)

JAVA设计模式之工厂模式(三种工厂模式)

m0_65260253的博客 2万+

26版SPSS操作教程(高级教程第二十一章)

#专注方能成事 #本期内容:信度分析 #由于导师最近布置了学习SPSS这款软件的任务,因此想来平台和大家一起交流下学习经验,这期推送内容接上一次高级教程第二十章的学习笔记,希望能得到一些指正和帮助~

你好! 1709

HQChart实战教程64-自定义分时图标题栏

分时图标题栏显示的是当前十字光标所在位置的分钟信息,显示在分时图窗口顶部。一般会显示品种的名称,日期,时间,价格,均价 涨幅,成交量,金额等等,hqchart内置会显示这些信息。如果要额外显示其他的字段,就需要通过替换格式化标题输出函数来是现实。我们在hqchart实例创建完成以后,通过OnCreatedCallback回调函数替换自己的格式化输出函数。返回 { AryText:[ { Text:文字, Color:颜色},…入参 data={ Data: 当前十字光标所在位置的分钟线 }

小银 1056

工厂模式及什么时候用工厂模式

在设计模式中,Factory   Method也是比较简单的一个,但应用非常广泛,EJB,RMI,COM,CORBA,Swing中都可以看到此模式的影子,它是最重要的模式之一.在很多地方都会看到xxxFactory这样命名的类     Factory  Method是一种创建性模式,它定义了一个创建对象的接口,但是却让子类来决定具体实例化哪一个类.当一个类无法预料要创建哪种类的对象或是一个

人工智能的专栏 1万+

华为MetaERP PTP采购到应付全流程解析

摘要:本文系统解析华为MetaERP中的PTP(采购到应付)全流程管理方案,涵盖从采购申请到付款执行的完整业务流程。文章详细分解了PR、PO、GR、IV、AP等关键环节的财务核算规则,并提供了预算校验、库存更新等Python代码示例。同时阐述了IT落地架构设计,包括会计引擎配置、系统集成方案及银企直连支付接口实现。该方案通过三单匹配自动化和智能会计引擎,将处理效率提升10倍(200笔/人天→2000笔/人天),实现98%的自动化率,为集团企业提供了高效的数字化财务管理样板。文中所有技术方案均需根据实际场景调

金牌架构师 1742

工厂模式(简单工厂模式+工厂模式)

工厂模式的在没有工厂模式的时候就是,客户需要一辆马车,需要客户亲自去创建一辆马车,然后拿来用。

m0_62645012的博客 1552

数学建模模型总结

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

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

工厂模式与抽象工厂模式

工厂模式 模式定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类 作用:实现了创建者和调用者的分离 详细分类:  简单工厂模式  工厂方法模式  抽象工厂模式 核心本质:  实例化对象不使用new,用工厂方法代替  将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。 三种模式: ◆简单工厂模式  用来生产同一等级结构中的任意产品(对于增加新的产品,需要修改已有代码),不满足开闭原则 ◆工厂方法模式  用来生产同一等级结构

qq_41784749的博客 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

什么是工厂模式

  创建型设计模式中的工厂模式可以细分为三种:分别是简单工厂模式、工厂方法模式、抽象工厂模式。下面通过一些例子更加形象的理解工厂上述三种模式。 简单工厂模式 定义:在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。   简单工厂模式属于类的创建型模式,又叫做静态工厂模式。通过专门定义一个工厂类来负责创建其它类的实例,被创建的实例通常都具有共同的父类。需要注意的是,简单工厂模式并不...

深度学习炼丹炉 3547

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

简单工厂模式,工厂方法模式,抽象工厂模式

简单工厂模式 工厂方法模式 抽象工厂模式

GeorgeGuoo的博客 2615

设计模式之简单工厂模式、工厂模式和抽象工厂模式

简单工厂模式、工厂模式和抽象工厂模式 1. 简单工厂模式 简单工厂模式属于创建型模式,是工厂模式的一种。简单工厂模式定义了一个创建对象的类,由这个类来封装实例化对象的行为。它是由一个工厂对象决定创建出哪一种产品类的实例。 简单工厂模式是工厂模式中最简单使用的模式。 简单工厂模式的三个角色 Factory(工厂角色) :简单工厂模式的核心,它负责实现创建所有实例的内部逻辑,根据调用时传入的参数,从而创建不同的对象。 Product(抽象产品角色) :简单工厂模式中所创建所有对象的父类,负责描述所以产品

JustToFaith 2169

设计模式——工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)

声明: 本博客名词定义等内容和图多是参考C语言中文网。 主要记录学习以下内容: 一、简单工厂模式 二、工厂方法模式 三、抽象工厂模式 工厂模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作放到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。 一、简单工厂模式 1.与简单工厂模式有关的基本概念 我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建

yi_chengyu的博客 1720

简单工厂模式、工厂模式以及抽象工厂模式

工厂方法模式:工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。一、简单工厂模式:实例化对象的时候不再使用 new Object()形式,可以根据用户的选择条件来实例化相关的类。对于客户端来说,去除了具体的类的依赖。只需要给出具体实例的描述给工厂,工厂就会自动返回具体的实例对象。具体实现如下:1. 定义一个操作接口:}2. 定义具体的操作类:// 加法计算}}// 减法计算。

m0_51797179的博客 797

工厂模式与代理工厂模式

一 ,工厂模式           工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。        由于工厂模式较为简单,就不进行详细的解释,文章中直接进行代码的演示举例,同学们有兴趣可以在这里看看...

南城渔客 3417

简单工厂模式、工厂模式、抽象工厂模式、工厂方法模式

工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类,这使得创建对象的过程与使用对象的过程实现了分离。一句话概括工厂模式简单工厂:一个具体工厂类,一个产品抽象类。普通工厂:多个具体工厂类,一个产品抽象类。抽象工厂:多个具体工厂类,多个产品抽象类。生活中的工厂模式简单工厂:一个鼠标工厂,只生产鼠标(可以是不同品牌)。普通工厂:多个不同品牌的鼠标工厂,只生产鼠标。抽象工厂:多个不同品牌的 PC 工厂,即可以生产鼠标、又可以生产键盘。简单工厂模式、普通工厂模式、抽象工厂模式的关联。

干就完了!!! 1034

工厂模式及简单的工厂模式详解

工厂模式 实现了创造者和调用者的分离 核心本质 实例化对象用工厂方法代替new操作 将选择实现类。创建对象统一管理和控制。从而将调用者跟我们的实现类解耦 详细分类 简单工厂模式 用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码) 工厂方法模式 用来生产同一等级结构中的固定产品。(支持增加任意产品) 抽象工厂模式 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力,支持...

蔡茂的博客 1115
上一篇: Android NDK(2、基础知识)
下一篇: Git常用命令
android_xiaogang
博客等级 码龄12年 89粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值