java设计模式之-工厂模式

什么是工厂模式?
工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,将对象的实例化逻辑封装在工厂类中。通过使用工厂模式,客户端可以通过调用工厂类的方法来创建对象,而无需直接使用new关键字实例化对象。

主要解决什么问题?
工厂模式主要解决以下问题:

封装对象的实例化过程:工厂类负责对象的实例化,客户端只需要调用工厂类的方法即可获取对象,无需关注对象的创建细节。
解耦对象的创建和使用:通过使用工厂模式,客户端与具体对象的实例化过程解耦,使得客户端代码更加灵活和可维护。

在什么时候我们需要使用工厂模式?
工厂模式适用于以下情况:

当创建对象的过程比较复杂,包含一些逻辑判断或依赖其他对象时,可以使用工厂模式将这些复杂的创建逻辑封装起来。
当需要封装对象的实例化过程,隐藏具体实现细节时,可以使用工厂模式。
用一个生活中的应用实例来举例、类比:
想象你要购买一台电脑,但你不需要了解电脑的具体制造过程。你可以去电脑商店,告诉销售员你的需求,然后销售员将根据你的需求从仓库中选择合适的电脑品牌和型号。在这种情况下,电脑商店充当了一个工厂,根据你的需求提供了合适的电脑。

优点:

将对象的创建逻辑集中在一个工厂类中,提高了代码的可维护性和可读性。
客户端与具体对象的实例化过程解耦,使得客户端代码更加灵活和可扩展。
可以通过工厂方法返回相同类型的不同实现,实现了多态性。
缺点:

引入工厂类增加了代码的复杂性和额外的开销。
当需要创建的对象比较简单时,使用工厂模式可能会过度设计,增加了不必要的复杂性。
使用场景:

当需要封装对象的实例化过程,隐藏具体实现细节时。
当创建对象的过程比较复杂,包含一些逻辑判断或依赖其他对象时。

示例代码:
下面是一个简单的示例代码,展示了工厂模式的应用。假设我们有一个图形接口Shape,我们希望通过工厂模式创建不同类型的图形对象。

public interface Shape {
void draw();
}

public class Circle implements Shape {
@Override
public void draw() {
System.out.println(“Drawing a circle”);
}
}

public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println(“Drawing a rectangle”);
}
}

public class ShapeFactory {
public Shape createShape(String shapeType) {
if (shapeType.equalsIgnoreCase(“circle”)) {
return new Circle();
} else if (shapeType.equalsIgnoreCase(“rectangle”)) {
return new Rectangle();
}
return null;
}
}

// 示例使用
public class FactoryExample {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
Shape circle = shapeFactory.createShape(“circle”);
circle.draw();

    Shape rectangle = shapeFactory.createShape("rectangle");
    rectangle.draw();

运行上述代码,将会输出以下结果:

Drawing a circle
Drawing a rectangle

在这个示例中,Shape是一个接口,CircleRectangle是实现了Shape接口的具体图形类。ShapeFactory是工厂类,它根据传入的参数创建相应的图形对象。客户端可以通过调用工厂类的createShape方法来获取所需的图形对象,而无需直接实例化具体的图形类。这样,客户端与具体图形类的实例化过程解耦,同时也隐藏了具体实现细节。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值