参考:https://www.runoob.com/design-pattern/factory-pattern.html
比如我们想要画一个形状,那么我们需要定义一个形状接口
/**
* 形状接口
*/
public interface Shape {
void draw();
}
然后定义各种形状的实现类
/**
* 正方形
*/
public class Square implements Shape {
@Override
public void draw() {
System.out.println("正方形");
}
}
/**
* 长方形
*/
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("长方形");
}
}
/**
* 园型
*/
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("园");
}
}
然后我们定义一个形状工厂,就是我们之间从工厂里面拿出形状,而不是自己去new一个形状
/**
* 形状工厂
*/
public class ShapeFactory {
//使用getShaps方法获取形状类型的对象
public Shape getShape(String shapeType){
if (shapeType==null){
return null;
}
if (shapeType.equalsIgnoreCase("circle")){
return new Circle();
} else if (shapeType.equalsIgnoreCase("rectangle")){
return new Rectangle();
} else if (shapeType.equalsIgnoreCase("square")){
return new Square();
}
return null;
}
}
测试:
我们只需要传入对应的形状就可以产生一个形状
public class FactoryPatternDemo {
public static void main(String[] args) {
ShapeFactory shapeFactory=new ShapeFactory();
//获取circle对象,并调用他的draw方法
Shape shape1=shapeFactory.getShape("circle");
shape1.draw();
//获取Rectangle对象,并调用他的draw方法
Shape shape2=shapeFactory.getShape("rectangle");
shape2.draw();
//获取square对象,并调用他的draw方法
Shape shape3=shapeFactory.getShape("square");
shape3.draw();
}
}
结果:
园
长方形
正方形