简单理解设计模式之工厂模式

来源:互联网 发布: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类,通过继承的方式来实现接口。

好了,工厂模式就介绍到这里了,模式的理解在于运用,用的多了,自然就会了。


0 0