小Q:什么是设计模式
慢慢:设计模式是系统服务设计中针对常见场景的一种解决方案,可以解决功能逻辑开发中遇到的共性问题。设计模式并不局限最终的实现方案,而是在这种概念模式下,解决系统设计中的代码逻辑问题。
小Q:什么是工厂模式
慢慢:工厂模式也称简单工厂模式,是创建型设计模式的一种,这种设计模式提供了按需创建对象的最佳方式。同时,这种创建方式不会对外暴露创建细节。
也就是通过定义一类物品的父类接口,通过这个接口来规范其下面的所有物品,再通过创建一个工厂,实现对这类物品的快速,灵活创建。
小Q:能不能通过代码来理解呢?
慢慢:好的👌 。
这是一个物品父类接口:
public interface Shape {
void draw();
}
这个模式下的所有物品都需要继承上面的接口:
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
创建一个工厂:
public class ShapeFactory {
//使用 getShape 方法获取形状类型的对象
public Shape getShape(String shapeType){
if(shapeType == null){
return null;
}
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();
//获取 Rectangle 的对象,并调用它的 draw 方法
Shape shape1 = shapeFactory.getShape("RECTANGLE");
//调用 Rectangle 的 draw 方法
shape1.draw();
//获取 Square 的对象,并调用它的 draw 方法
Shape shape2 = shapeFactory.getShape("SQUARE");
//调用 Square 的 draw 方法
shape2.draw();
}
}
小Q:为什么要工厂呢?我直接创建类不也可以?
慢慢:如果一个类上有很多的属性,并且这些属性或行为的默认值基本一致,我们就可以通过工厂的形式去封装这部分代码,从而减少类每次创建时都得重复设置的麻烦。
小Q:为什么要这么麻烦,创建这么多个类,直接用 if-else 来区分不同的物品不就行了吗?
慢慢:这就是要学习设计模式的意义所在。如果我们通过在代码里去区分不同的物品,如果有大量的物品,且需要改动的情况下,我们不仅要定位到要修改的位置,甚至可能得要理清整段代码的逻辑。
而通过不同的类去区分,我们只需要定位到这个类即可,并对其进行专门的修改。