设计模式-03 设计模式-工厂模式factory-内部工厂

设计模式-03 设计模式-工厂模式factory-内部工厂

目录

设计模式-03 设计模式-工厂模式factory-内部工厂

         1.定义

2.内涵

3.案例对比

4.特点

4.总结


1.定义

内部工厂模式是一种创建类对象的方式,其中工厂方法被封装在类内部,客户端只能通过类的公共接口来访问。

2.内涵
  • 松耦合:客户端代码与具体的产品类解耦,只与工厂类交互。
  • 可扩展性:可以在不影响客户端代码的情况下轻松添加或删除产品类。
  • 封装:产品类的创建过程被封装在工厂类中,隐藏了实现细节。
  • 可控制:工厂类可以控制创建过程,例如限制实例的数量或满足某些条件。
  • 可测试:更容易单元测试工厂类,因为可以模拟产品类的行为。
  • 单一职责原则:工厂类负责创建对象,而产品类负责实现特定行为,遵循单一职责原则。
  • 减少冗余:避免在客户端代码中重复创建逻辑。
  • 可扩展性:可以通过将新的工厂方法添加到内部工厂类来轻松添加新的产品类型。
  • 可维护性:由于创建过程被封装在内部,因此更容易维护和更改。

3.案例对比
//
// Created by Administrator on 2024/5/4.
//
//
// 独立类
// factory on 2024/5/3.
//
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <fstream>
#include <tuple>
#include <sstream>
#include <memory>
#include <cmath>
using namespace std;

enum class PointType
{
    cartesian,
    polar
};

struct Point
{
    Point(float x, float y):x(x),y(y){}

    float x, y;

public:
    friend ostream &operator<<(ostream &os, const Point &point)
    {
        os << "X:" << point.x << " Y:" << point.y << endl;
        return os;
    }


    struct PointFactory
    {
        PointFactory(){

        }
        static Point NewCartesian(float x, float y)
        {
            return {x,y};
        }
        static Point NewPolar(float rho, float theta)
        {
            return {rho*cos(theta), rho*sin(theta)};
        }
    };
};



int main()
{
    auto p = Point::PointFactory::NewPolar(5, 3.1415 / 4);
    cout << p <<endl;

    Point p2 = {0.5, 0.4};
    cout << p2 <<endl;

}

代码中的类 PointFactory定义在 Point 类内部,并且起到一个工厂类的作用。

4.特点

内部工厂模式比其他创建模式更合适的情况包括:

  •  子类创建和管理自己的实例:内部工厂模式允许子类创建和管理自己的实例,而无需通过外部或父级工厂介入。这在需要有多个工厂来生成特定类型对象的不同变体或实现时很有用。
  •  控制对象创建过程:内部工厂模式使子类能够控制创建过程,自定义如何创建和配置对象。这在需要根据特定条件或参数动态创建对象的场景中特别有用。
  •  隐藏复杂性:内部工厂模式可以将复杂的对象创建逻辑隐藏在子类内部。客户端代码只需使用工厂方法即可创建对象,而无需了解创建过程的具体细节。这有助于提高代码的可读性和可维护性。
  •  代码重用:通过将对象创建逻辑封装在子类中,内部工厂模式允许代码重用。每个子类可以定义其自己的特定创建逻辑,避免重复代码。
  •  可扩展性:内部工厂模式很容易扩展,因为可以创建新的子类来处理其他类型的对象创建。这提高了代码库的可扩展性和灵活性。
  • 与抽象工厂和建造者模式不同,内部工厂模式:
  •  不需要显式的工厂层:对象是由子类自己创建的,而不是通过外部工厂。
  •  更具体化:子类可以自定义对象创建逻辑,而其他模式提供了更通用的创建过程。
  •  更轻量级:它通常比其他模式更轻量级,因为不需要外部工厂或复杂的配置过程。
4.总结

内部工厂模式允许子类创建和管理自己的实例,而无需通过外部或父级工厂介入。这在需要有多个工厂来生成特定类型对象的不同变体或实现时很有用。如果符合这种场景,可以采用内部工厂设计模式。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值