UML类图
代码示例
- 定义苹果类接口,包含一个描述方法
/**
* 苹果抽象类
*/
public interface IApple {
/**
* 具体描述
*/
void describe();
}
- 红苹果,实现了接口苹果和定义的方法
/**
* 红苹果
*/
public class RedApple implements IApple {
@Override
public void describe() {
System.out.println("This is red apple");
}
}
- 青苹果,实现了接口苹果和定义的方法
/**
* 青苹果
*/
public class GreenApple implements IApple {
@Override
public void describe() {
System.out.println("This is green apple");
}
}
- 定义梨子类接口,包含一个描述方法
/**
* 梨子抽象类
*/
public interface IPear {
/**
* 具体描述
*/
void describe();
}
- 青梨,实现了接口梨子和定义的方法
/**
* 青梨
*/
public class GreenPear implements IPear {
@Override
public void describe() {
System.out.println("This is green pear");
}
}
- 黄梨,实现了接口梨子和定义的方法
/**
* 黄梨
*/
public class YellowPear implements IPear {
@Override
public void describe() {
System.out.println("This is yellow pear");
}
}
- 水果工厂抽象类
/**
* 水果工厂抽象类
*/
public interface IFruitFactory {
/**
* 创建苹果实例
*
* @return
*/
IApple createApple();
/**
* 创建梨子实例
*
* @return
*/
IPear createPear();
}
- 工厂A: 负责生产青苹果和青梨
/**
* 工厂A: 负责生产青苹果和青梨
*/
public class FactoryA implements IFruitFactory {
@Override
public IApple createApple() {
return new GreenApple();
}
@Override
public IPear createPear() {
return new GreenPear();
}
}
- 工厂B: 负责生产红苹果和黄梨
/**
* 工厂B: 负责生产红苹果和黄梨
*/
public class FactoryB implements IFruitFactory {
@Override
public IApple createApple() {
return new RedApple();
}
@Override
public IPear createPear() {
return new YellowPear();
}
}
- 客户端测试
public class Main {
public static void main(String[] args) {
IFruitFactory factoryA = new FactoryA();
IApple apple = factoryA.createApple();
apple.describe();
IPear pear = factoryA.createPear();
pear.describe();
System.out.println("-------------------");
IFruitFactory factoryB = new FactoryB();
apple = factoryB.createApple();
apple.describe();
pear = factoryB.createPear();
pear.describe();
}
}
总结思考
抽象工厂用于提供创建一系列相关或互相依赖的接口,而无需指定它们具体的类。对比工厂方法,抽象工厂面对的是整个产品族,而工厂方法面对的是独立的产品。
相关链接
示例代码
设计模式:简单工厂、工厂方法、抽象工厂之小结与区别