简单工厂模式适用于某大类的产品或对象其下可分为多种子类型的对象,每种子类型在大类的基础上又有各自特色的行为或方法。用户在使用时不需要知道具体的对象是怎么产生的,不关心对象的生成过程,只需要根据用户需求提供对应的对象就可以,这时我们就可以使用一个统一的工厂来封装对象的生成过程,将对象的生产和使用解耦开来,这样也利于后续的维护。
如图形(Shape)大类,其下又可分为长方形(Rectangle),正方形(Square),圆形(Circle)等多种子类。对于图形大类来说,拥有draw()方法来进行画图,但是对于每个子图形来说,各自的draw()又是不同的。同时我们需要图形的统一生产工厂,也就是ShapeFactory,根据不同的需求生产相应的产品。以下为简单工程模式的具体代码:
Shape接口
package com.factoryPattern;
public interface Shape {
void draw();
}
Shape具体的实现类:
package com.factoryPattern;
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("这是长方形。。。");
}
}
package com.factoryPattern;
public class Square implements Shape {
@Override
public void draw() {
System.out.println("这是正方形。。。");
}
}
package com.factoryPattern;
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("这是圆形。。。");
}
}
然后需要生产图形的工厂:
package com.factoryPattern;
public class ShapeFactory {
public Shape getShape(String type)
{
Shape shape = null;
if (type != null) {
if (type.equals("RECTANGLE"))
{
shape = new Rectangle();
}
else if (type.equals("SQUARE"))
{
shape = new Square();
}
else if (type.equals("CIRCLE"))
{
shape = new Circle();
}
}
return shape;
}
}
测试类:
package com.factoryPattern;
public class FactoryPatternDemo {
public static void main(String[] args) {
ShapeFactory factory = new ShapeFactory();
Shape rectangle = factory.getShape("rectangle".toUpperCase());
Shape square = factory.getShape("square".toUpperCase());
Shape circle = factory.getShape("circle".toUpperCase());
rectangle.draw();
square.draw();
circle.draw();
}
}
以上只是最简单的工厂模式的示例代码,用来让大家对工厂模式有一个大概的了解,具体的应用和优化还需要在实际应用中不断地学习和改进,力求达到当前工作应用场景下的最佳状态。
扫码关注公众号“JAVA记录册”,免费领取超实用软件开发资料视频(包括大数据,前端完整视频,maven教程视频,java面试必备视频教程,Java并发视频教程)
该公众号致力于为大家分享工作中会用到一些简单实用的小知识,而不是那些悬在云端的高大上但又感觉空泛的文章,欢迎大家关注,谢谢!