您的位置:首页 > 编程语言 > Java开发

java设计模式之抽象工厂模式

2013-10-21 21:15 435 查看
    网上已经有很多关于设计模式的介绍。这里偶也说一下自己对设计模式的理解。

    抽象工厂模式:它的优点就是能将各个功能模块划分的比较干净。咱们就以网上常见的奶茶铺作为例子。如果我们需要设计一个能贩卖多种奶茶的奶茶铺,那我们该如何

设计呢?

    1.我们需要设计一个公共奶茶的调配接口(allocate)

    2.各类奶茶实现这个接口

    3.有一个专门生产奶茶的工厂(factory)

    4.无论什么奶茶铺,只要调用这个调配接口(allocate)即可完成.

    示例代码如下

    1.定义公共接口

    

interface milkteaAllocate {
public void allocate();
}

 

    2.各类奶茶实现这个接口

class milkteaType1 implements milkteaAllocate {
@Override
public void allocate() {
System.out.println("milkteaType1");
}
}


     3.创建一个工厂
     

public static milkteaAllocate getMilk(int type) {
switch(type) {
case TYPE1:
return new milkteaType1();

case TYPE2:
//TODO
default:

return null;
}
}


    4.奶茶铺取得奶茶   

public class milkteaStore {
public void getMilkTea() {
factory.getMilk(factory.TYPE1).allocate();
}
}


上述就是简单的抽象工厂示例。这样的好处在哪里:
1.如果这段代码是由2个人来编写。A编写奶茶,B编写奶茶铺。则大家其实都只需要对allocate这个函数理解正确即可。奶茶的具体实现和奶茶铺的具体实现

   没有任何关系。这个就是所说的针对接口编程。

2.如果写过C语言的话,大家可能对于C语言的函数映射印象深刻,即用一个数组保存一系列的函数指针,然后根据不同的状态,调用对于数组的函数指针即可。

   很多C代码中都会使用这样的方法实现状态机。

   其实使用抽象工厂的思想,也可以实现相同的功能。

   具体代码如下:

   

public static final int TYPE0 = 0;
public static final int TYPE1 = 1;
public static final int TYPE2 = 2;
public static final int TYPE3 = 2;
public static final int TYPE4 = 2;

milkTeaAllocate milkTea[] = {
new milkteaType0(),
new milkteaType1(),
new milkteaType2(),
new milkteaType3(),
new milkteaType4(),
} ;

   

   接下来调用的方法就如下:

   milkTea[Type0].allocate();

   使用上面的方法我们可以将数据和具体的逻辑完全的分开。

这个就是我对抽象工厂的理解。

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: