工厂模式个人理解--JAVA

来源:互联网 发布:sql select 不同 编辑:程序博客网 时间:2024/06/03 21:30

一直想学习下设计模式,不过总是被耽搁,今天就从最简单的工厂模式开始吧.记录下来.

买了个GOF的设计模式的书,不过自己水平有限,上面的例子又都不是java的,举的例子又不像国内的那种简单, 所以看起来有点吃力,

就去网上搜了下看看别人的新的,结果发现大部分内容都一样, 而且大部分内容和书上的也一样.只是例子换了而已.

对于工厂模式的描述, 各个博客基本是一字不差,而且感觉过于学院派.我还是把我个人理解写下来吧.


工厂模式分类:(GOF的书中只说了2种,1,2算一种)

1.简单工厂

2.工厂方法

3.抽象工厂

下面一种一种来说.有个博客的开车的例子不错.我也用这个例子来说明.

1.简单工厂

例如一个土豪,有三辆车,奔驰,宝马,奥迪.  还雇了司机为他开车。不过土豪坐车时总是怪怪的:

上奔驰,车后跟司机说“开奔驰车!”,坐上宝马后他说“开宝马车!”,坐上奥迪说“开奥迪车!”

这中问题,在程序中也会出现. 可以用简单工厂来解决.(总感觉好像学习多态的时候也是这种例子)

代码很简单. 先抽象一个车的接口,每个车都实现这个接口.

然后做个生产车的工厂(一个类),来判断生成什么车.

public interface Car {public void driver();}public class BenCar implements Car {@Overridepublic void driver() {System.out.println("Ben dirver !!!");}}public class AodiCar implements Car {@Overridepublic void driver() {System.out.println("Aodi dirver !!!");}}
//来判断生成什么车public class CarFactory {public static Car getCar(String type){if(type.equals("Ben")){return new BenCar();}if(type.equals("Aodi")){return new AodiCar();}return null;}}
<pre name="code" class="java">public class Person {public static void main(String[] args) {Car car = <span style="font-family: Arial;">CarFactory </span><span style="font-family: Arial;">.getCar("Aodi");</span>car.driver();}}

小结:感觉很简单吧. 这个模式有一点不好的地方,就是新增一辆车的话,就需要去工厂的CarFactory里面增加一个判断.

据说这个不符合开闭原则(对扩展开放;对修改封闭).还有就是可能如果层次多的话,CarFactory比较乱吧.

(还有个个人疑惑, 是否CarFactory里面的getCar()方法必须是static的才算简单工厂?)

2. 工厂方法

工厂方法,就是把上面的CarFactory类也抽象一下,这样就符合开闭原则, 代码如下(Car类不变,就用上面的代码)

public interface Driver {public Car getCar();}public class BenDriver implements Driver {@Overridepublic Car getCar() {return new BenCar();}}public class AodiDriver implements Driver {@Overridepublic Car getCar() {return new AodiCar();}}public class Person {public static void main(String[] args) {Driver driver = new AodiDriver();Car car = driver.getCar();car.dirver();}}

总结;可以看到工厂方法就是把工厂再抽象了一下.

3.抽象工厂

抽象工厂和工厂方法貌似没有太大区别.网上的说明都是指抽象工厂是为了应付更复杂的模式.


总结: 感觉工厂模式,其实主要是面向接口编程,增强代码的可扩展性等.

这个设计模式不算太难,难的应该是什么时候用这个模式.这可能只有实战经验才行了.


0 0
原创粉丝点击