一、引言
闲时多写写博客,忙时多敲敲代码,充实又有收获,何乐而不为?马上要找工作了,后悔以前太懒惰,积累太少,现在只能奋起追逐。by the way,有好工作的可以求介绍。坐标:杭州、武汉。好了,言归正传,今天的正题是抽象工厂模式。
二、什么叫抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
三、抽象工厂的类图
四、抽象工厂方式中的角色
(1)抽象工厂角色:抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。
(2)具体工厂角色:具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。
(3)抽象产品角色:抽象模式所创建的所有对象的父类,它负责描述所有实现共有的公共接口。
(4)具体产品角色:抽象模式所创建的具体实例对象。
五、举例说明
工程结构:
Fruit.java
package designModeAbstractFactory;Apple.java
//抽象产品类
public interface Fruit {
public String getName();
public String getColor();
}
package designModeAbstractFactory;Orange.java
//具体产品角色类
public class Apple implements Fruit {
@Override
public String getName() {
// TODO Auto-generated method stub
return "Apple";
}
@Override
public String getColor() {
// TODO Auto-generated method stub
return "Red";
}
public void appleDo(){
System.out.println("apple can be eat");
}
}
package designModeAbstractFactory;IFruitFactory.java
//具体产品类
public class Orange implements Fruit{
@Override
public String getName() {
// TODO Auto-generated method stub
return "Orange";
}
@Override
public String getColor() {
// TODO Auto-generated method stub
return "Yellow";
}
public void orangeDo(){
System.out.println("orange do can be look");
}
}
package designModeAbstractFactory;FruitFactory.java
//抽象工厂角色
public abstract class IFruitFactory {
public abstract Apple createApple();
public abstract Orange createOrange();
}
package designModeAbstractFactory;AbstractFactoryTest.java
//具体工厂类
public class FruitFactory extends IFruitFactory {
@Override
public Apple createApple() {
// TODO Auto-generated method stub
return new Apple();
}
@Override
public Orange createOrange() {
// TODO Auto-generated method stub
return new Orange();
}
}
package designModeAbstractFactory;
//测试类
public class AbstractFactoryTest {
public static void main(String args[]){
IFruitFactory fruitFactory = new FruitFactory();
Apple apple = fruitFactory.createApple();
System.out.println(apple.getName());
System.out.println(apple.getColor());
apple.appleDo();
Orange orange=fruitFactory.createOrange();
System.out.println(orange.getName());
System.out.println(orange.getColor());
orange.orangeDo();
}
}
运行结果:
Apple
Red
apple can be eat
Orange
Yellow
orange do can be look
六、总结
无论是简单工厂模式、工厂方法模式还是抽象工厂模式,他们之间都是可以相互转化的,而不同之处在于他们所对应的产品种类规模和产品种类级别。因此只要灵活运用,不必在意具体是那种方式。
所以,在使用工厂模式时,只需要关心降低耦合度的目的是否达到了。