慢慢说设计模式:工厂模式

小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 来区分不同的物品不就行了吗?

慢慢:这就是要学习设计模式的意义所在。如果我们通过在代码里去区分不同的物品,如果有大量的物品,且需要改动的情况下,我们不仅要定位到要修改的位置,甚至可能得要理清整段代码的逻辑。

而通过不同的类去区分,我们只需要定位到这个类即可,并对其进行专门的修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慢慢编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值