简单理解设计模式之工厂模式
来源:互联网 发布:linux运维会被云取代吗 编辑:程序博客网 时间:2024/05/18 09:16
废话不多说,今天我们来谈谈设计模式中的工厂模式。
1.首先我们来看看关于工厂模式的定义
定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。ps:工厂方法让类把实例化推迟到子类。
2.跟所有人一样,一开始理解这个定义的时候我也有点懵,到底让类把实例化推迟到子类到底意味着什么,有的时候我也会把它跟简单工厂模式傻傻分不清,可能使运用的比较少,平时少思考把。其实归咎到底,工厂不过是我们创建对象的手段而已,我们要把它想成他只是负责生成我们需要的对象而已,这样就能理解了。
3.我们先设计一个例子,然后我们根据这个例子来谈谈到底怎么使用吧
(1)我们来搞一个生成我们常喝的液体饮料的例子,工厂生成咖啡,茶,橙汁对象
(2)通过下面的图来看看怎么设计
(3)我们先从图出发,首先定义一个接口:DrinkProduct 然后是他的实现类 CreateDrink(先不实现),接着再定义一个接口Drink 以及它的实现类coffee,tea,juice,、在这里要说明的一点是DrinkProduct跟Drink是平行关系的,所以说他们之间是松耦合的。
4.说了这么多,我觉得还是通过代码来实现会比较好一点理解,我们一起来实现以下:
(1)创建interface-----DrinkProduct
package com.zqu.yqy.scdn.test.test004;public interface DrinkProduct { Drink createDrink(String DrinkName);}
(2)创建一个跟DrinkProduct平行的接口interface--------Drink
package com.zqu.yqy.scdn.test.test004;public interface Drink {void whatDrink();}
(3)实现Drink接口
coffee
package com.zqu.yqy.scdn.test.test004;public class coffee implements Drink {@Overridepublic void whatDrink() {System.out.println("I am coffee Object");}}tea
package com.zqu.yqy.scdn.test.test004;public class tea implements Drink {@Overridepublic void whatDrink() {System.out.println("I am tea Object");}}juice
package com.zqu.yqy.scdn.test.test004;public class juice implements Drink {@Overridepublic void whatDrink() {System.out.println("I am juice Object");}}
(4)实现interface-----ConcreteCreator
package com.zqu.yqy.scdn.test.test004;public class ConcreteCreator implements DrinkProduct {Drink drink = null;@Overridepublic Drink createDrink(String DrinkName) {if (DrinkName == "tea") {return drink = new tea();} else if (DrinkName == "coffee") {return drink = new coffee();} else if (DrinkName == "juice") {return drink = new juice();}return drink;}}
(5)使用工厂方法
package com.zqu.yqy.scdn.test.test004;public class run {public static void main(String[] args) {DrinkProduct d = new ConcreteCreator(); Drink d1 = d.createDrink("tea"); Drink d2 = d.createDrink("coffee"); Drink d3 = d.createDrink("juice"); d1.whatDrink(); d2.whatDrink(); d3.whatDrink(); }}结果截图:
就是这样我们就实现了工厂模式,想想它是不是把创建对象推迟到了子类?
在这里我们需要注意的是上面所有的接口也可以是abstarct类,通过继承的方式来实现接口。
好了,工厂模式就介绍到这里了,模式的理解在于运用,用的多了,自然就会了。
- 简单理解设计模式之工厂模式
- 设计模式理解之工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)
- 设计模式之简单工厂的理解
- 简单理解设计模式之抽象工厂模式
- 大白话之设计模式--简单工厂模式理解记忆
- 设计模式 之简单工厂+ 工厂模式
- 设计模式之简单工厂设计模式
- 设计模式之简单工厂模式,工厂模式,策略模式
- 简单理解设计模式之工厂模式(简单工厂方法)
- 设计模式 之 简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 2016秋季练习
- 【jzoj4791】【矩阵】
- 单片机项目:驱动VS1003模块
- Oracle数据库程序包全局变量的应用
- Android studio设置requestWindowFeature(Window.FEATURE_NO_TITLE);出错
- 简单理解设计模式之工厂模式
- 使用List的时候会将对象全部取出
- 崩溃后程序保持运行状态而不退出
- sctf 2014 pwn300
- 异或算法在算法求解中的妙用
- Linux 下编译Android-VLC开源播放器详解(附源码下载)
- 数据链路层常见威胁与防御技术
- 第三周 项目 3 求合集并集(补)
- js 放大镜