简单工厂模式、工厂模式和抽象工厂模式
1. 简单工厂模式
简单工厂模式属于创建型模式,是工厂模式的一种。简单工厂模式定义了一个创建对象的类,由这个类来封装实例化对象的行为。它是由一个工厂对象决定创建出哪一种产品类的实例。
简单工厂模式是工厂模式中最简单使用的模式。
简单工厂模式的三个角色
-
Factory(工厂角色) :简单工厂模式的核心,它负责实现创建所有实例的内部逻辑,根据调用时传入的参数,从而创建不同的对象。
-
Product(抽象产品角色) :简单工厂模式中所创建所有对象的父类,负责描述所以产品的实例行为。
-
Concrete Product(具体产品角色):简单工厂模式的创建目标,所有从工厂中创建的对象都是充当这个角色的某个具体类的实例。
举一个栗子
创建一个可以绘制不同图形的工具,可以绘制圆形、矩形等。
Shape:抽象产品形状
package cn.personalweb.factory.simplefactory;
public abstract class Shape {
/**
* 画图形的方法
*/
abstract void draw();
}
Circle:具体产品圆形
实现了Shape
中的画方法。
package cn.personalweb.factory.simplefactory;
public class Circle extends Shape{
@Override
void draw() {
System.out.println("draw Circle");
}
}
Rectangle:具体产品矩形
实现了Shape
中的画方法。
package cn.personalweb.factory.simplefactory;
public class Rectangle extends Shape {
@Override
void draw() {
System.out.println("draw Rectangle");
}
}
SimpleFactory:简单工厂
内部定义了一个创建产品的方法getShape
,此方法根据传入的参数来创建不同的产品。
package cn.personalweb.factory.simplefactory;
public class SimpleFactory {
public Shape getShape(String shapeType) {
if (shapeType == null) {
return null;
}
if (shapeType.equals("Circle")) {
return new Circle();
} else if (shapeType.equals("Rectangle")) {
return new Rectangle();
}
return null;
}
}
Client:客户端
package cn.personalweb.factory.simplefactory;
public class Client {
public static void main(String[] args) {
SimpleFactory simpleFactory = new SimpleFactory();
Shape rectangle = simpleFactory.getShape("Rectangle");
rectangle.draw();
Shape circle = simpleFactory.getShape("Circle");
circle.draw();
}