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

  • 前言
  • 工厂模式
  • 普通工厂模式
  • 普通工厂模式例子
    • 简单工厂模式总结:
    • 简单工厂模式优缺点:
  • 抽象工厂模式
  • 抽象工厂模式的例子
    • 抽象工厂模式小结
    • 抽象工厂模式优缺点

前言

工厂就是批量生产产品的地方,那么在android开发中工厂模式也可以理解为生产对象的一种模式。使用工厂模式可以把对象的具体创建和使用分开,使用者不必关心对象是如何创建的只需使用即可。

工厂模式

工厂模式是创建型模式,是android开发中常见的设计模式之一,一般用于生产复杂对象的地方。工厂模式降低了对象之间的耦合,由于工厂模式依赖抽象的架构,实例化的任务交给子类去完成,所以有很好的扩展性。
工厂模式分为普通工厂模式和抽象工厂模式。

普通工厂模式

创建同类产品的不同类型,如华为手机苹果手机都是手机。

普通工厂模式例子

定义一个Phone的抽象类。

public abstract class Phone {public abstract void phoneName();
}

提供一个抽象方法phoneName(),是手机的名称。
定义一个具体的手机。

public class Mate50Phone extends Phone{@Overridepublic void phoneName() {}
}

定义了一个Mate50Phone 继承了Phone并实现了phoneName方法。
产品定义好了,下面定义工厂。

public abstract class PhoneFactory {public abstract <T extends Phone> T createPhone(Class<T> clz);
}

工厂的作用就是生产Phone ,所以提供了一个抽象方法createPhone。下面具体实现这个工厂。

public class HuaWeiPhoneFactory  extends PhoneFactory {@Overridepublic <T extends Phone> T createPhone(Class<T> clz) {Phone phone = null;try {phone = (Phone) Class.forName(clz.getName()).newInstance();} catch (Exception e) {e.printStackTrace();}return (T) phone;}
}

HuaWeiPhoneFactory 工厂也很简单就实现了抽象方法createPhone,来生产不同的手机。这里我们使用了反射方法。

  phone = (Phone) Class.forName(clz.getName()).newInstance();

就是说通过类名(ClassName)来实例化具体的类,是用反射机制来实现的。生产不同的手机只需传入不同的类即可。
生产不同的手机只需新建一个类继承Phone即可。

        HuaWeiPhoneFactory huaWeiPhoneFactory=new HuaWeiPhoneFactory();Mate50Phone mate50Phone=huaWeiPhoneFactory.createPhone(Mate50Phone.class);mate50Phone.phoneName();Mate50PhonePro mate50PhonePro=huaWeiPhoneFactory.createPhone(Mate50PhonePro.class);mate50PhonePro.phoneName();

到此一个简单的普通工厂模式就结束了。

简单工厂模式总结:

1.普通工厂模式:生产具体的产品,创建的产品是类(Class)

简单工厂模式优缺点:

优点:客户端需要什么产品,可以直接得到,逻辑判断在工厂里面。
缺点:扩展性一般,产品都是一个产品族下面的产品,对于不在产品族中的产品,没办法去扩展,另外获得具体某种产品的逻辑放在工厂里面,新添加产品的时候就需要修改工厂里面的代码。

抽象工厂模式

创建不同类的产品,如手机CPU和电池是不同的产品

抽象工厂模式的例子

定义一个手机(处理器)的零件Processor,定义一个抽象产品CPU。

public interface Processor {public interface CPU {void showCpuName();}
}

然后定义一个CPU的具体产品Snapdragon8Plus(骁龙8+)。

public class Snapdragon8Plus implements Processor.CPU{@Overridepublic void showCpuName() {}
}public class Snapdragon8Gen14 implements Processor.CPU{@Overridepublic void showCpuName() {}
}

产品定义好了,下面定义工厂,抽象出工厂类的方法。

public abstract class Factory {public abstract Processor.CPU createCPU();
}

注意一点这里的抽象方法跟抽象工厂模式并无实际关系,不是因为这里使用抽象类而因此叫抽象工厂模式,而是因为工厂模式生产的产品Processor.CPU抽象出来的,抽象工厂模式因此而来。

接着我们看具体工厂的实现。

public class Mate50Factory extends Factory{@Overridepublic Processor.CPU createCPU() {return new Snapdragon8Plus();}
}public class Mate50ProFactory extends Factory{@Overridepublic Processor.CPU createCPU() {return new Snapdragon8Gen14();}
}

可以看到Mate50Factory 和Mate50ProFactory 两个工厂模式他们创建的产品相同,都是创建CPU这个抽象产品。只是型号不同,一个型号是Snapdragon8Plus,一个型号是Snapdragon8Gen14。而这两个产品又是通过不同子类来实现的。

抽象工厂模式小结

1、 生产抽象的产品,创建的产品是接口(Interface)
2、抽象工厂模式创建的产品是接口,抽象出来的。
3、上面的例子其实跟普通工厂模式例子没太大的差别,除了产品不同,实现的思想都是一样的,只是这里用了不同的工厂对应不同的产品。普通工厂模式也可以这样用。

抽象工厂模式优缺点

优点:
1.分离接口与实现,无需关系创建的细节
2.将一个系列的产品统一到一起创建
缺点:
1.规定了所有可能被创建的产品集合,产品族中扩展新的产品困难;
2.增加了系统的抽象性和理解难度,抽象工厂模式在切换产品类的时候更加灵活容易

Android常用设计模式之工厂模式理解相关推荐

  1. Android常用设计模式之Builder模式理解

    Android常用设计模式之Builder模式 1 单例模式 2 Builder模式 Builder模式的应用场景 总结 1 单例模式 单例模式之前有详细的介绍,可移步到链接: 常见的单例模式及其特点 ...

  2. Unity3D常用设计模式之工厂模式

    Unity3D常用设计模式<工厂模式>   工厂模式(Factory Pattern)是游戏开发中比较常用的设计模式.这种类型的设计模式属于创建型模式,它提供了一种创建对象实例的最佳方式. ...

  3. android常用的工厂模式,Android的设计模式-简单工厂模式

    前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中:java 1.定义 定义一个用于建立对象的接口,让子类决定实例化哪一个类.设计模式 2.介绍 简单工厂模式属于建立型模式. 简单工厂模 ...

  4. 初学Java常用设计模式之——工厂模式

    声明:转载请附上原文链接 提示:标题序号从2开始,是照应不同设计模式笔记发布的顺序而定的,比如,第上一篇文章 初学Java常用设计模式之--单例模式 序号从1开始 2. 工厂模式(常用) ⼯⼚模式介绍 ...

  5. Spring常用设计模式--简单工厂模式

    本专栏内容参考自:咕泡学院Tom老师的<Spring5核心原理与30个类手写实战>,仅作个人学习记录使用,如有侵权,联系速删. 工厂模式的由来:   在现实生活中我们都知道,原始社会自给自 ...

  6. 抽象工厂模式_常用设计模式--抽象工厂模式

    抽象工厂模式 定义 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 作用 在工厂方法模式中,我们的具体创建者每次使用都只能创建一个同类型的对象,假如我们现在需要的是多个不同类型的 ...

  7. Java常用设计模式————抽象工厂模式

    简介 每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例. 与工厂方法模式的区别 工厂方法模式针对的是一个产品等级结构,而抽象工厂模式针对的是多个产品等级结构,因此抽象工厂模式在结构上要比工厂方 ...

  8. 初学Java常用设计模式之——原型模式

    声明:转载请附上原文链接 提示:标题序号从3开始,是照应不同设计模式笔记发布的顺序而定的,比如,第上一篇文章 初学Java常用设计模式之--工厂模式 序号从2开始. 标题后面之所以加上了解,是因为相对 ...

  9. Android 常用设计模式(一)

    由于项目变更的频繁性,作为一名程序员,我们需要掌握设计模式的必要性,就不言而喻~~,下面就是一些我自己学习的设计模式总结. 接下来,主要是针对几个比较常用模式进行讲解,主要是以下几种: 观察者模式 适 ...

最新文章

  1. WeQuant交易策略—简单均线
  2. 几种典型的软件自动化测试框架
  3. 补课系列:最小生成树
  4. 参数详解 复制进程_如何优化PostgreSQL逻辑复制
  5. vm设置虚拟服务器定时重启,vm服务器设置自动重启
  6. 同一路由器下两台电脑ping不通_复杂网络环境下路由器配置问题导致业务故障处理案例分享...
  7. html天猫倒计时代码,怎么用JavaScript编写一个天猫上使用的倒计时?
  8. 清除浮动-:after伪元素法(HTML、CSS)
  9. win10官方原版镜像系统
  10. android 极光推送教程 视频教程,Android 极光推送教程
  11. Python实现抽签(团日活动抽倒霉蛋
  12. pytorch_lesson16.1 OpenCV索贝尔算子/拉普拉斯算子调用+pytorch中构建cnn+复现经典模型(LeNet5+AlexNet)
  13. tar,bz2,bzip等格式解压缩命令汇总
  14. 初学者也能看懂的Ray March体积云
  15. Powershell / windows终端 无法加载文件 因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170
  16. 学习强国十年磨剑最新分数及排名
  17. 免费获取百度网盘会员一天的不限速网盘会员
  18. 免费论文下载:林巧稚的论文期刊
  19. JS双引号转义,号切割
  20. 从WAVE SUMMIT+2021,寻找新一代AI人不可或缺的“凝视”

热门文章

  1. 缘份居在线起名,姓名打分API接口
  2. 用多媒体计算机画图教学设计,用计算机画图教学设计
  3. 关于 canvas 画圆方法 arc() 方法的理解
  4. 简述算法分析的概念,实际分析中考虑的侧重点是什么?
  5. 微信公众号开发之返回按钮返回指定页面
  6. 电脑经常蓝屏的解决办法
  7. java html 转 jpg cobra,Cobra
  8. SEO实战之提升百度权重和网站PR值的秘籍
  9. Android Studio 和 gradle 修改缓存文件夹路径
  10. Python中引号的用法