工厂模式理解

工厂的作用就是生产实例,但其与构造函数不同。工厂是用来生产多种类型实例的。例如,麦当劳可以生产汉堡,薯条和可乐,再例如,美的可以生产冰箱,洗衣机,和空调等。工厂生产的产品必须要用相关性,属于一个产品族或者属于多个相近的产品族。

工厂模式分为三种,分别是

1. 简单工厂,通过switch语句根据产品标识生产不同类型的产品,直接调用各种产品的构造函数
2. 工厂,对简单工厂的优化,将工厂进行抽象,新增产品只需增加指定工厂和产品,不需要修改单一工厂的switch语句,不会影响其他产品
3. 抽象工厂,比工厂模式多的就是,可以生产多个产品族,就是一个工厂可以同时生产多个产品,而普通工厂只能生产一个产品

(ES6)代码实现如下:

1.简单工厂

复制代码
class SimpleFactory{
    constructor(prodNo) //构造工厂时告知工厂产品标识
    {
        this.prodNo = prodNo;
    }

    GetProduct()
    {
        switch (this.prodNo) //根据产品标识生产产品
        {
            default:
                return new ProductA();
            case 1:
                return new ProductA();
            case 2:
                return new ProductB();
        }

    }
}

//产品接口
class IProduct
{
    //产品方法
    //......
}
//产品A
class ProductA extends IProduct 
{
    //产品属性
    //......
}

//产品B
class ProductB extends IProduct
{
    //产品属性
    //......
}
复制代码

2.工厂模式

复制代码
class IFactory //工厂接口
{
    GetProduct(){

    }
}
//A工厂类
class FactoryA extends IFactory
{
    constructor()
    {
        this.productA = new ProductA();
    }
    //A工厂生产A产品
    GetProduct() 
    {
        return this.productA;
    }
}

//B工厂类
class FactoryB extends IFactory
{
    constructor()
    {
        this.productB = new ProductB();
    }
    //B工厂生产B产品
    GetProduct() 
    {
        return this.productB;
    }
}

//产品接口
class IProduct
{
    //产品方法
    //......
}

//产品A
class ProductA extends IProduct
{
    //产品属性
    //......
}

//产品B
class ProductB extends IProduct
{
    //产品属性
    //......
}
复制代码

3.抽象工厂

复制代码
//工厂接口,即抽象工厂
class IFactory
{
    CreateFridge();
    CreateAirCondition();
}

//三星的工厂,生产三星的产品族
class SamsungFactory extends IFactory
{

    CreateAirCondition() 
    {
        return new SamsungAirCondition(); //三星的工厂生产三星的空调
        
    }

    CreateFridge()
    {
        return new SamsungFridge(); //三星的工厂生产三星的冰箱
    }
}

//格力的工厂,生产格力的产品族
class GreeFactry extends IFactory
{
    CreateAirCondition()
    {
        return new GreeAirCondition(); //格力的工厂生产格力的空调
    }

    CreateFridge()
    {
        return new GreeFridge(); //格力的工厂生产格力的冰箱
    }
}

//冰箱产品接口
class IFridge
{
    //冰箱产品接口
    //冰箱的action
}

//空调接口
class IAirCondition
{
    //空调产品接口
    //空调的action
}

//三星的冰箱
class SamsungFridge extends IFridge
{
    //三星冰箱的action和property
}
//格力的冰箱
class GreeFridge extends IFridge
{
        //格力冰箱的action和property
}

//三星的空调
class SamsungAirCondition extends IAirCondition
{
    //三星空调的action和property
}
//格力的空调
class GreeAirCondition extends IAirCondition
{
    //格力空调的action和property
}
复制代码

 

参考:http://blog.jobbole.com/109594/

posted @   全玉  阅读(567)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示