Android设计模式------工厂模式
来源:互联网 发布:四川电信网络测速 编辑:程序博客网 时间:2024/05/10 20:17
转载请声明地址:http://blog.csdn.net/bxllove/article/details/65662260
1.简介
提到 ”工厂“ 顾名思义 ,”工厂”这个词汇在百度此条里被翻译为“制造厂”,是用来生产货物的工业建筑物 。而今天我们所介绍到的工厂模式和这个差不多,也是用来生产产品的"工业建筑物"。他们的功能都是一样的 即创造生产”产品“ 一个工厂可以生产一类产品也可以生产多类产品。 这完全取决于工厂方法的的设计制定。“制造者”可以根据个人的需要设计出自己所需要的相关类产品。
2.工厂模式定义
简单的来说所谓的工厂在java中就是通过创建一个对象的接口 而让子类具体实例化某个类。
3.工厂模式设计原理UML
4.具体代码实现类如下:
第一步:
/*ZHM * 抽象生产的产品 */public abstract class AbsProduct {// 制造产品例如:可以各种型号的车 但具体型号车以及参数由子类实现public abstract void made();}
第二步:
/** * 子类(ProOne)代表中国产品(中国车) */public class ProOne extends AbsProduct {// 制造中国车@Overridepublic void made() {System.out.println("雪铁龙,made in 中国");}}
/**ZHM * 子类(ProTwo)代表美国产品 (美国车) * @author ZHM * */public class ProTwo extends AbsProduct {@Overridepublic void made() {System.out.println( "福特,made in America");}}第三步:
/**ZHM * 抽象工厂生产间 * @author ZHM * */public abstract class AbsFactory {//生产抽象产品public abstract AbsProduct createPro();}第四步:
/*ZHM * ProOneFactory 代表中国生产车间 */public class ProOneFactory extends AbsFactory {@Overridepublic AbsProduct createPro() {return new ProOne();// 创建中国产品实现中国的伟大复兴梦}}
/*ZHM * ProTwoFactory类 美国汽车制造商 */public class ProTwoFactory extends AbsFactory {@Overridepublic AbsProduct createPro() {return new ProTwo();//创造美国产品}}
第五步:
public class complete {public static void main(String[] args) {AbsFactory chinaFactory = new ProOneFactory();AbsFactory amricaFactory = new ProTwoFactory();ProOne china =(ProOne) chinaFactory.createPro();ProTwo amrica =(ProTwo) amricaFactory.createPro();china.made();amrica.made();}}
打印结果:
雪铁龙,made in 中国福特,made in America
总结:通过以上事例不难发现工厂模式是依赖于抽象架构的。 由子类实例化抽象接口 是有很好扩展性功能的 并且它能够降低对象之间的耦合性 同时也是符合开发设计原则的。
思考:
但我们不能总是每生产一种产品就创建这种产品的工厂 ,想想有没有可能性让 这条生产线工厂能够生产多种产品 也就是说让一个工厂生产不同型号品牌的车。答案是有的 。
具体代码如下 :--------------------------------------------------------------------------------
第一步:
/* * 抽象生产的产品 */public abstract class AbsProduct {// 制造产品例如:可以各种型号的车 但具体型号车以及参数由子类实现public abstract void made();}第二步:
/* * 具体实现One类 */public class ProOne extends AbsProduct {// 制造中国车@Overridepublic void made() {System.out.println("大家好我是雪铁龙汽车");}}
/** * 子类(ProTwo)代表美国产品 (美国车) * @author ZHM * */public class ProTwo extends AbsProduct {@Overridepublic void made() {System.out.println( "大家好我是福特汽车");}}第三步:
/** * 抽象工厂生产间 * * @author ZHM * */public abstract class AbsFactory {// 生产抽象产品public abstract <T extends AbsProduct> T createPro(Class<T> clz);}第四步:
/** * 大的生产车间 中美合作共同投资的车间 各种车各种成产 * * @author zhm * */public class BigFactory extends AbsFactory {AbsProduct p = null;public <T extends AbsProduct> T createPro(Class<T> clz) {try {p = (AbsProduct) Class.forName(clz.getName()).newInstance();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return (T) p;}}
第五步:
public class complete {public static void main(String[] args) {AbsFactory bigFactory = new BigFactory();ProOne chinaCar=bigFactory.createPro(ProOne.class);chinaCar.made();ProTwo amricaCar=bigFactory.createPro(ProTwo.class);amricaCar.made();}}打印结果:
大家好我是雪铁龙汽车
大家好我是福特汽车
总结:是不是眼睛一亮 茅塞顿开 ,不明白的可以这么想 第一个车间只能生产一个国家的车(中国车),第二个车间是由中美共同投资的车间就能建造两个国家的车型(中国车和美国车)大家都玩过红色警戒吗 当自己的工程师偷了敌人的基地也就能建造两个国家的建筑及武器了 这个大工厂就好比是已被偷了的基地 。。个人是这么理解的 其实也就是改变了由子类实现接口实例中的方法 。( ProOneFactory ProTwoFactory )--------集合成了------->(BigFactory) 代码虽简单但还是需要反复不断的练习思考明白原理 不然, 一旦被问到 尤其是面试 啥都不知道就懵B了 。
工厂模式的应用场景 :缓存机制有磁盘缓存 内存缓存 或者文件存储(sqllite)和(sharedPreferences) 画板上的一些增删查改 大概就这意思......
小提示: 如若哪里说错请@ME及时纠正 让我们 共同学习,共同进步吧 -------------Dr
- android设计模式-工厂模式
- android 设计模式:工厂模式
- Android设计模式------工厂模式
- Android设计模式之工厂设计模式
- Android设计模式---工厂方法模式和抽象工厂模式
- android 设计模式-抽象工厂
- Android设计模式系列--工厂方法模式
- android设计模式之简单工厂模式
- android设计模式之工厂方法模式
- android设计模式之抽象工厂模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android 设计模式之工厂模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android中的设计模式-工厂方法模式
- Android中的设计模式-抽象工厂模式
- Android设计模式系列--工厂方法模式
- ZJOI2017酱油记
- pat L2-006. 树的遍历(后序+中序->层次)
- PHP 5.0网络编程技术视频教程
- 关于apache日志
- Cookie与Session的区别-总结很好的文章
- Android设计模式------工厂模式
- 2015年仿团800首页视频教程
- Python渗透测试工具合集
- 浅谈LSTM网络
- 查看电脑登录信息
- 【Nagios】【运维】Linux下Nagios的安装与配置
- jstl的core标签库
- php教程MYSQL学习视频PHP程序员基础视频课程
- Python13