一、简单工厂模式与工厂方法模式简介
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现(摘自百度百科)。
简单工厂模式又 叫静态工厂方法模式,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式与工厂方法模式最大的区别在于简单工厂模式的一个工厂类可以根据用户传入不同的参数返回相应的类。
工厂方法模式:工厂方法模式与简单工厂模式设计相近,最大的区别在于工厂方法模式中每一个类都有自己产生的工厂类。所有工厂类均继承一个于一个接口。
二、简单工厂模式
Shape.java
package com.jz.dao;
public interface Shape {
public void draw();
}
Circle.java
package com.jz.dao;
public class Circle implements Shape {
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("This is Circle::draw() method.");
}
}
Square.java
package com.jz.dao;
public class Square implements Shape {
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("This is Square::draw() method.");
}
}
Rectangle.java
package com.jz.dao;
public class Rectangle implements Shape {
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("Inside Rectangle::draw() method.");
}
}
ShapeFactory.java
package com.jz.factory;
//简单工厂模式,根据传入的参数,创建指定的类并返回
import com.jz.dao.Circle;
import com.jz.dao.Rectangle;
import com.jz.dao.Shape;
import com.jz.dao.Square;
public class ShapeFactory {
public static Shape getShape(String type) {
if ("circle".equals(type)) {
return new Circle();
} else if ("rectangle".equals(type)) {
return new Rectangle();
} else if ("square".equals(type)) {
return new Square();
} else {
return null;
}
}
}
三、工厂方法模式
MyShapeFactory.java
package com.jz.factory;
//工厂方法模式
//定义抽象类的工厂接口,当想要实现某个具体类时,继承即可
import com.jz.dao.Shape;
public interface MyShapeFactory {
public Shape getShape();
}
CircleFactory.java
package com.jz.factory;
import com.jz.dao.Circle;
import com.jz.dao.Shape;
public class CircleFactory implements MyShapeFactory {
@Override
public Shape getShape() {
// TODO Auto-generated method stub
return new Circle();
}
}
ShapeFactory.java
package com.jz.factory;
import com.jz.dao.Circle;
import com.jz.dao.Shape;
public class CircleFactory implements MyShapeFactory {
@Override
public Shape getShape() {
// TODO Auto-generated method stub
return new Circle();
}
}
RectangleFactory.java
package com.jz.factory;
import com.jz.dao.Rectangle;
import com.jz.dao.Shape;
public class RectangleFactory implements MyShapeFactory {
@Override
public Shape getShape() {
// TODO Auto-generated method stub
return new Rectangle();
}
}
Test.java
package test;
import com.jz.dao.Rectangle;
import com.jz.factory.RectangleFactory;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
RectangleFactory rl = new RectangleFactory();
Rectangle rc = (Rectangle) rl.getShape();
rc.draw();
}
}