工厂设计模式可分为:
简单工厂模式
工厂方法模式
抽象工厂模式
第一篇我们来聊聊
简单工厂模式
最近想学习一些设计模式的知识,所以在网上参考了一些文章和例子,为了尊重原创,这里先感谢原创作者的辛苦付出,如对原创作者造成不利的影响,请联系本人博客。
晨鸣的博客
理解
假设某些实例具有相同的方法,可以根据参数的不同返回不同的实例,被创建的实例通常都具有共同的父类,那么可以考虑使用简单设计模式来实现。
例如可以实用简单工厂模式设计一个可以创建不同几何形状(如圆形、方形和三角形等)的绘图工具,每个几何图形都具有绘制draw()和擦除erase()两个方法。
例子(摘自晨鸣的博客):
//图形接口
public interface Shape {
void draw();
void erase();
}
//圆形
public class RoundShape implements Shape {
@Override
public void draw() {
System.out.println("画了一个圆形!");
}
@Override
public void erase() {
System.out.println("擦除一个圆形!");
}
}
//三角形
public class TriangleShape implements Shape {
@Override
public void draw() {
System.out.println("画了一个三角形!");
}
@Override
public void erase() {
System.out.println("擦除一个三角形!");
}
}
//工厂类
public class ShapeFactory {
public static Shape getShape(String type) {
Shape shape = null;
if (type.equalsIgnoreCase("ROUND")) {
shape = new RoundShape();
} else if (type.equalsIgnoreCase("TRIANGLE")) {
shape = new TriangleShape();
}
return shape;
}
}
客户端测试代码如下
public class Client {
public static void main(String[] args) {
Shape shape;
shape = ShapeFactory.getShape("round");
shape.draw();
shape.erase();
shape = ShapeFactory.getShape("triangle");
shape.draw();
shape.erase();
}
}
运行结果如下
画了一个圆形!
擦除一个圆形!
画了一个三角形!
擦除一个三角形!
总结
简单工厂模式中工厂类的职责太重,一旦不能工作将影响整个系统,且如果添加过多的产品,工厂类中的逻辑就过于复杂。所以简单工厂模式适用于逻辑简单,且需要创建对象较少的情况。