您的位置:首页 > 其它

设计模式之抽象工厂模式

2017-03-31 23:29 183 查看

抽象工厂模式

定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。上一节讲到简单工厂模式,那抽象工厂模式就是简单工厂的升级版。不止是简单工厂一个工厂,而是N个工厂。一个具体工厂会有个产品族。而每一个具体工厂创建属于同一个产品族,但是分属于不同等级结构的产品。



从图里可以看出简单工厂的身影,其实相当把多个简单工厂再进行管理。这次也是奶茶的例子,比如奶茶店扩大规模,要在各地方建设奶茶店,但是每个地方奶茶风格都不同。东部奶茶店有东部珍珠奶茶,西部奶茶店有西部珍珠奶茶。这时每个奶茶店需要独立出一个工厂。

代码示例

奶茶抽象工厂类,并且定义创建奶茶方法。

public interface MilkTeaFactory {
MilkTea createMilkTea(String type);
}


奶茶抽象类,用于定义规范。

public abstract class MilkTea {}


两个具体奶茶工厂类。根据传进的类型返回奶茶实例。

//西部奶茶工厂
public class WestMilkTeaFactory implements MilkTeaFactory{

public MilkTea createMilkTea(String type) {
MilkTea milkTea = null;
if (type.equals("珍珠奶茶")) {
milkTea = new WestPearlMilkTea();
} else if (type.equals("抹茶奶茶")) {
milkTea = new WestMatchalMilkTea();
}
return milkTea;
}

}

//东部奶茶工厂
public class EastMilkTeaFactory implements MilkTeaFactory{

public MilkTea createMilkTea(String type) {
Mil
4000
kTea milkTea = null;
if (type.equals("珍珠奶茶")) {
milkTea = new EastPearlMilkTea();
} else if (type.equals("抹茶奶茶")) {
milkTea = new EastMatchalMilkTea();
}
return milkTea;
}

}


客户端

MilkTeaFactory factory = new EastMilkTeaFactory();
MilkTea milkTea = factory.createMilkTea("珍珠奶茶");//东部的珍珠奶茶

factory = new WestMilkTeaFactory();
milkTea = factory.createMilkTea("抹茶奶茶");//西部的抹茶奶茶


抽象工厂模式符合依赖倒置原则,依赖抽象而不依赖具体。如果西部奶茶换成东部奶茶,直接替换相应的子类。该模式缺点也非常明显,需要多个产品族才能发挥作用,也导致类膨胀。所以这模式并不常见。

工厂方法

除了简单工厂,抽象工厂模式。还有一种常见的方法,那就是工厂方法。工厂方法并不属于模式,只是一个方法。对外提供静态方法,作用是创建实例并且返回。通常实例不多都采取这种方式,类也不用扩充。

public static MilkTea createMilkTea(String type) {
MilkTea milkTea = null;
if (type.equals("珍珠奶茶")) {
milkTea = new PearlMilkTea();
} else if (type.equals("抹茶奶茶")) {
milkTea = new MatchalMilkTea();
}
return milkTea;
}


总述

总的来说,抽象工厂需要很多的产品族才能发挥作用,平时不常见也不常用。不足之处望指教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: