工厂模式

本文深入解析了工厂模式的三种形式:简单工厂、工厂方法和抽象工厂。通过实例代码展示了每种模式如何实现对象创建的解耦,以及它们在不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.核心本质

 
            实现了调用者和创建者的分离,用工厂方法代替new操作
            将选择实现类,创建对象统一管理和控制.从而将调用者和实现类解耦
 
                详细分类:
 
                简单工厂模式
                                       用来生产同一等级结构的任意产品(增加新产品需要修改已有代码, 可通过装饰者模式优化)
 
                工厂方法模式
                                        用来生产同一等级结构的固定产品(支持增加任意产品)
 
                抽象工厂模式
                                       用来生产不同产品族的全部产品(支持增加产品族)

二. 工厂示例

2.1 简单工厂

package com.skd.designMode.factory;

public class SimpleFactory
{
    public static Xiaomi getXiaomi()
    {
        return new Xiaomi();
    }

    public static Huawei getHuawei()
    {
        return new Huawei();
    }
}

class Xiaomi
{
}

class Huawei
{
}

2.2 工厂方法

package com.skd.designMode.factory;

/**
 * @TODO 工厂方法
 * 
 * 不同工厂实现同一个接口生产不同型号的同一类型产品
 * 
 */
public class methodFactory
{
    public static void main(String[] args)
    {
        MiPhone miPhone = (MiPhone) new MiPhone().createPhone();
        IPhone iPhone = (IPhone) new IPhone().createPhone();
        
    }

}

interface Phone{
    Phone createPhone();
}

class MiPhone implements Phone{

    @Override
    public Phone createPhone()
    {
        return new MiPhone();
    }
    
}

class IPhone implements Phone{

    @Override
    public Phone createPhone()
    {
        return new IPhone();
    }
    
}

2.3 抽象工厂

package com.skd.designMode.factory;

/**
 * @TODO 抽象工厂模式  用于生产产品族 支持增加产品族
 * 
 *         针对多个业务类型的场景(多个接口)
 */
public class AbstractFactory
{
    public static void main(String[] args)
    {
        // 高端汽车
        Car nbcar = new NBCar();
        // 高端引擎
        nbcar.createEngine();
        // 高端轮胎
        nbcar.createTyre();
        
        // 低端汽车
        Car sbcar = new SBCar();
        // 低端引擎
        sbcar.createEngine();
        // 低端轮胎
        sbcar.createTyre();
    }
}

/**
 * @TODO 汽车接口
 */
interface Car{
    Tyre createTyre();
    Engine createEngine();
}

/**
 * @TODO 生产高端汽车
 */
class NBCar implements Car {

    @Override
    public Tyre createTyre()
    {
        return new NBTyre().createTyre();
    }

    @Override
    public Engine createEngine()
    {
        return new NBEngine().createEngine();
    }
    
}

/**
 * @TODO 生产低端汽车
 */
class SBCar implements Car {

    @Override
    public Tyre createTyre()
    {
        return new SBTyre().createTyre();
    }

    @Override
    public Engine createEngine()
    {
        return new SBEngine().createEngine();
    }
    
}
/**
 * @TODO 轮胎接口
 */
interface Tyre{
    Tyre createTyre();
}

/**
 * @TODO 高端轮胎
 */
class NBTyre implements Tyre{

    @Override
    public Tyre createTyre()
    {
        return new NBTyre();
    }
    
}

/**
 * @TODO 低端轮胎
 */
class SBTyre implements Tyre{

    @Override
    public Tyre createTyre()
    {
        return new SBTyre();
    }
    
}

/**
 * @TODO 引擎接口
 */
interface Engine{
    Engine createEngine();
}

/**
 * @TODO 高端引擎
 */
class NBEngine implements Engine{

    @Override
    public Engine createEngine()
    {
        return new NBEngine();
    }
    
}

/**
 * @TODO 低端引擎
 */
class SBEngine implements Engine{

    @Override
    public Engine createEngine()
    {
        return new SBEngine();
    }
    
}

 

转载于:https://www.cnblogs.com/virgosnail/p/9445724.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值