设计模式之工厂方法

  •   大家好!欢迎莅临厚土燎原的天地,深感荣幸能与您相遇在此,共同品读我的拙作。您的阅读如同春风化雨,对我而言意义非凡。衷心邀请您留下宝贵的评论与指点,每一字一句都是对我莫大的鼓励与鞭策。热烈欢迎,期待与您智慧碰撞,共绘思想的火花!


目录

 

描述

角色

优点

缺点

总结

实例

抽象工厂

具体工厂

抽象产品

具体产品

具体使用


描述

工厂方法模式(Factory Method Pattern)是面向对象设计中创建型模式的一种。它的主要目的是定义一个用于创建对象的接口,但让子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类中进行。在工厂方法模式中,创建对象的责任被划分成了两部分:一部分是定义创建对象的接口(也就是抽象工厂类),另一部分是具体实现接口的类(也就是具体工厂类)。

本质:不再提供统一个工厂类,而是每一个产品对应一个工厂,工厂都实现同一个接口。


角色

抽象工厂:提供创建产品的接口

具体工厂:实现创建产品的接口,完成产品的创建。

抽象产品:产品的公共接口。

具体产品:工厂创建的目标。


优点

1、扩展性好:当需要增加新的产品时,只需要增加一个具体的产品类和对应的具体工厂类,无需修改抽象工厂 和抽象产品代码。

2、符合开闭原则:对扩展开放,对修改关闭,增加了系统的稳定性和可维护性。

3、隐藏了产品类的创建细节:客户端只需要关心产品的接口,不需要知道产品是如何被创建出来的。


缺点

1、增加了类的数量:每增加一个产品,就需要增加一个具体产品类和一个具体工厂类,增加了系统的复杂度。

2、系统层次结构较多:增加了系统的抽象性和理解难度。


适用场景

  1. 当一个类不知道它所必须创建的对象的类时:在工厂方法模式中,客户端不需要知道具体产品的类名,只需要知道对应的工厂类即可。

  2. 当一个类希望由它的子类来指定它所创建的对象时:工厂方法模式允许子类在实例化时改变所创建对象的类型。

  3. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化时:通过工厂方法,可以将对象的创建逻辑封装在工厂类中,客户端不需要关心对象的创建过程。


总结

简述:不同条件下创建不同实例

一句话概括:产品标准化,生产更高效

目的:封装创建细节

生活案例:实体工厂


实例

抽象工厂

public interface ShapeFactory {
    Shape getShape();
}

具体工厂

public class CircleShapeFactory implements ShapeFactory{
    @Override
    public Shape getShape() {
        return new CircleShape();
    }
}
public class RectShapeFactory implements ShapeFactory{
    @Override
    public Shape getShape() {
        return new RectShape();
    }
}
public class TriangleShapeFactory implements ShapeFactory{
    @Override
    public Shape getShape() {
        return new TriangleShape();
    }
}

抽象产品

public interface Shape {
    void draw();
}

具体产品

public class CircleShape implements Shape{
    @Override
    public void draw() {
        System.out.println("draw circleShape");
    }
}
public class RectShape implements Shape{
    @Override
    public void draw() {
        System.out.println("draw rectShape");
    }
}
public class TriangleShape implements Shape{
    @Override
    public void draw() {
        System.out.println("draw triangleShape");
    }
}

具体使用

public static void main(String[] args) {
        ShapeFactory triangleShapeFactory = new TriangleShapeFactory();
        ShapeFactory rectShapeFactory = new RectShapeFactory();
        ShapeFactory circleShapeFactory = new CircleShapeFactory();
        Shape triangleShape = triangleShapeFactory.getShape();
        Shape rectShape = rectShapeFactory.getShape();
        Shape circleShape = circleShapeFactory.getShape();
        triangleShape.draw();
        rectShape.draw();
        circleShape.draw();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

厚土燎原

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

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

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

打赏作者

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

抵扣说明:

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

余额充值