简介
工厂方法:抽象产品,具体产品,抽象工厂,具体工厂。在简单工厂的基础上,多出一个抽象工厂,每个具体工厂只能生产一种产品
类图
代码
/**
* 简单工厂-抽象产品
* @author: 张彬
* @date: 2018年3月22日 下午2:44:27
* @version: V1.0
* @review: 张彬/2018年3月22日 下午2:44:27
*/
public interface Shape {
public void draw();
}
/**
* 工厂方法-具体产品
* @author: 张彬
* @date: 2018年3月22日 下午3:07:48
* @version: V1.0
* @review: 张彬/2018年3月22日 下午3:07:48
*/
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("in Circle::draw() method.");
}
}
/**
* 工厂方法-具体产品
* @author: 张彬
* @date: 2018年3月22日 下午2:46:10
* @version: V1.0
* @review: 张彬/2018年3月22日 下午2:46:10
*/
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("in Rectangle::draw() method.");
}
}
/**
* 工厂方法-具体产品
* @author: 张彬
* @date: 2018年3月22日 下午2:47:46
* @version: V1.0
* @review: 张彬/2018年3月22日 下午2:47:46
*/
public class Square implements Shape {
@Override
public void draw()
{
System.out.println("in Square::draw() method.");
}
}
/**
* 工厂方法-抽象工厂
* @author: 张彬
* @date: 2018年3月22日 下午4:15:20
* @version: V1.0
* @review: 张彬/2018年3月22日 下午4:15:20
*/
public interface ShapeFactory {
public Shape getShape();
}
/**
* 工厂方法-具体工厂 (只敲这一个)
* @author: 张彬
* @date: 2018年3月22日 下午3:22:20
* @version: V1.0
* @review: 张彬/2018年3月22日 下午3:22:20
*/
public class CircleFactory implements ShapeFactory {
@Override
public Shape getShape() {
return new Circle();
}
}
/**
* 测试
* @author: 张彬
* @date: 2018年3月22日 下午3:04:34
* @version: V1.0
* @review: 张彬/2018年3月22日 下午3:04:34
*/
public class FactoryMethodDemo {
public static void main(String[] args) {
ShapeFactory shapeFactory = new CircleFactory();
Shape circle = shapeFactory.getShape();
circle.draw();
}
}
输出结果:
in Circle::draw() method.