Android常用设计模式之工厂模式理解
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常用设计模式之工厂模式理解相关推荐
- Android常用设计模式之Builder模式理解
Android常用设计模式之Builder模式 1 单例模式 2 Builder模式 Builder模式的应用场景 总结 1 单例模式 单例模式之前有详细的介绍,可移步到链接: 常见的单例模式及其特点 ...
- Unity3D常用设计模式之工厂模式
Unity3D常用设计模式<工厂模式> 工厂模式(Factory Pattern)是游戏开发中比较常用的设计模式.这种类型的设计模式属于创建型模式,它提供了一种创建对象实例的最佳方式. ...
- android常用的工厂模式,Android的设计模式-简单工厂模式
前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中:java 1.定义 定义一个用于建立对象的接口,让子类决定实例化哪一个类.设计模式 2.介绍 简单工厂模式属于建立型模式. 简单工厂模 ...
- 初学Java常用设计模式之——工厂模式
声明:转载请附上原文链接 提示:标题序号从2开始,是照应不同设计模式笔记发布的顺序而定的,比如,第上一篇文章 初学Java常用设计模式之--单例模式 序号从1开始 2. 工厂模式(常用) ⼯⼚模式介绍 ...
- Spring常用设计模式--简单工厂模式
本专栏内容参考自:咕泡学院Tom老师的<Spring5核心原理与30个类手写实战>,仅作个人学习记录使用,如有侵权,联系速删. 工厂模式的由来: 在现实生活中我们都知道,原始社会自给自 ...
- 抽象工厂模式_常用设计模式--抽象工厂模式
抽象工厂模式 定义 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 作用 在工厂方法模式中,我们的具体创建者每次使用都只能创建一个同类型的对象,假如我们现在需要的是多个不同类型的 ...
- Java常用设计模式————抽象工厂模式
简介 每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例. 与工厂方法模式的区别 工厂方法模式针对的是一个产品等级结构,而抽象工厂模式针对的是多个产品等级结构,因此抽象工厂模式在结构上要比工厂方 ...
- 初学Java常用设计模式之——原型模式
声明:转载请附上原文链接 提示:标题序号从3开始,是照应不同设计模式笔记发布的顺序而定的,比如,第上一篇文章 初学Java常用设计模式之--工厂模式 序号从2开始. 标题后面之所以加上了解,是因为相对 ...
- Android 常用设计模式(一)
由于项目变更的频繁性,作为一名程序员,我们需要掌握设计模式的必要性,就不言而喻~~,下面就是一些我自己学习的设计模式总结. 接下来,主要是针对几个比较常用模式进行讲解,主要是以下几种: 观察者模式 适 ...
最新文章
- WeQuant交易策略—简单均线
- 几种典型的软件自动化测试框架
- 补课系列:最小生成树
- 参数详解 复制进程_如何优化PostgreSQL逻辑复制
- vm设置虚拟服务器定时重启,vm服务器设置自动重启
- 同一路由器下两台电脑ping不通_复杂网络环境下路由器配置问题导致业务故障处理案例分享...
- html天猫倒计时代码,怎么用JavaScript编写一个天猫上使用的倒计时?
- 清除浮动-:after伪元素法(HTML、CSS)
- win10官方原版镜像系统
- android 极光推送教程 视频教程,Android 极光推送教程
- Python实现抽签(团日活动抽倒霉蛋
- pytorch_lesson16.1 OpenCV索贝尔算子/拉普拉斯算子调用+pytorch中构建cnn+复现经典模型(LeNet5+AlexNet)
- tar,bz2,bzip等格式解压缩命令汇总
- 初学者也能看懂的Ray March体积云
- Powershell / windows终端 无法加载文件 因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170
- 学习强国十年磨剑最新分数及排名
- 免费获取百度网盘会员一天的不限速网盘会员
- 免费论文下载:林巧稚的论文期刊
- JS双引号转义,号切割
- 从WAVE SUMMIT+2021,寻找新一代AI人不可或缺的“凝视”