工厂模式

工厂模式是一种创建型设计模,工厂模式将对象的创建过程封装起来,客户端不需要知道具体创建的是哪个类的实例,只需要知道对应的工厂即可。

工厂模式分为三类

简单工厂模式(Simple Factory)

  1. 由一个工厂类根据传入的参数决定创建哪一种产品类的实例
  2. 工厂类集中了所有产品的创建逻辑
  3. 违反了开闭原则,添加新产品时需要修改工厂类
java 复制代码
// 饮品接口
interface Beverage {
    void prepare();
}

// 咖啡实现
class Coffee implements Beverage {
    @Override
    public void prepare() {
        System.out.println("制作一杯香浓咖啡");
    }
}

// 茶实现
class Tea implements Beverage {
    @Override
    public void prepare() {
        System.out.println("泡一壶清香茶水");
    }
}

// 果汁实现
class Juice implements Beverage {
    @Override
    public void prepare() {
        System.out.println("榨一杯新鲜果汁");
    }
}

// 简单饮品工厂
class BeverageFactory {
    public static Beverage createBeverage(String type) {
        switch (type.toLowerCase()) {
            case "coffee":
                return new Coffee();
            case "tea":
                return new Tea();
            case "juice":
                return new Juice();
            default:
                throw new IllegalArgumentException("不支持的饮品类型: " + type);
        }
    }
}

// 使用示例
public class SimpleFactoryDemo {
    public static void main(String[] args) {
        // 顾客点单
        Beverage coffee = BeverageFactory.createBeverage("coffee");
        coffee.prepare();
        
        Beverage tea = BeverageFactory.createBeverage("tea");
        tea.prepare();
        
        Beverage juice = BeverageFactory.createBeverage("juice");
        juice.prepare();
    }
}

工厂方法模式(Factory Method)

  1. 定义一个创建产品对象的接口,让子类决定实例化哪一个类
  2. 工厂方法使一个类的实例化延迟到其子类
  3. 符合开闭原则,易于扩展
java 复制代码
// 运输工具接口
interface Transport {
    void deliver();
}

// 卡车实现
class Truck implements Transport {
    @Override
    public void deliver() {
        System.out.println("通过陆路运输货物");
    }
}

// 轮船实现
class Ship implements Transport {
    @Override
    public void deliver() {
        System.out.println("通过海运运输货物");
    }
}

// 运输工厂接口
interface Logistics {
    Transport createTransport();
}

// 陆路运输工厂
class RoadLogistics implements Logistics {
    @Override
    public Transport createTransport() {
        return new Truck();
    }
}

// 海路运输工厂
class SeaLogistics implements Logistics {
    @Override
    public Transport createTransport() {
        return new Ship();
    }
}

// 使用示例
public class LogisticsDemo {
    public static void main(String[] args) {
        // 陆路运输
        Logistics roadLogistics = new RoadLogistics();
        Transport truck = roadLogistics.createTransport();
        truck.deliver();
        
        // 海路运输
        Logistics seaLogistics = new SeaLogistics();
        Transport ship = seaLogistics.createTransport();
        ship.deliver();
    }
}

抽象工厂模式(Abstract Factory)

  1. 提供一个创建一系列相关或相互依赖对象的接口
  2. 无需指定它们具体的类
  3. 适用于产品族的创建
java 复制代码
// 手机接口
interface Phone {
    void call();
}

// 笔记本接口
interface Laptop {
    void work();
}

// iPhone实现
class IPhone implements Phone {
    @Override
    public void call() {
        System.out.println("使用iPhone打电话");
    }
}

// MacBook实现
class MacBook implements Laptop {
    @Override
    public void work() {
        System.out.println("使用MacBook办公");
    }
}

// 小米手机实现
class MiPhone implements Phone {
    @Override
    public void call() {
        System.out.println("使用小米手机打电话");
    }
}

// 小米笔记本实现
class MiLaptop implements Laptop {
    @Override
    public void work() {
        System.out.println("使用小米笔记本办公");
    }
}

// 电子产品套装工厂接口
interface ElectronicsFactory {
    Phone createPhone();
    Laptop createLaptop();
}

// 苹果产品套装工厂
class AppleFactory implements ElectronicsFactory {
    @Override
    public Phone createPhone() {
        return new IPhone();
    }
    
    @Override
    public Laptop createLaptop() {
        return new MacBook();
    }
}

// 小米产品套装工厂
class MiFactory implements ElectronicsFactory {
    @Override
    public Phone createPhone() {
        return new MiPhone();
    }
    
    @Override
    public Laptop createLaptop() {
        return new MiLaptop();
    }
}

// 使用示例
public class ElectronicsDemo {
    public static void main(String[] args) {
        // 苹果产品套装
        ElectronicsFactory appleFactory = new AppleFactory();
        Phone iPhone = appleFactory.createPhone();
        Laptop macBook = appleFactory.createLaptop();
        iPhone.call();
        macBook.work();
        
        // 小米产品套装
        ElectronicsFactory miFactory = new MiFactory();
        Phone miPhone = miFactory.createPhone();
        Laptop miLaptop = miFactory.createLaptop();
        miPhone.call();
        miLaptop.work();
    }
}
相关推荐
码匠许师傅10 小时前
【设计模式精讲】7.建造者模式(Builder)
设计模式·建造者模式
码匠许师傅10 小时前
【设计模式精讲】6.抽象工厂(Abstract Factory)
c++·设计模式
workflower1 天前
人形机器人灵巧手产业链
人工智能·设计模式·机器人·云计算·无人机
Java后端的Ai之路1 天前
03、Python - 抽象工厂模式
开发语言·python·设计模式·抽象工厂模式·通用智慧
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-45-解释器模式(源码剖析篇)
java·设计模式·解释器模式·源码分析·pattern·spel·javacc
码匠许师傅1 天前
【设计模式精讲】4.单例模式(Singleton)
c++·单例模式·设计模式
雾削木1 天前
2026 编程领域热点知识速览:AI 辅助开发、设计模式实战与嵌入式高效迭代
人工智能·设计模式
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-42-访问者模式(业务实战篇)
java·spring·设计模式·访问者模式·asm·营销规则·数据结构与操作分离
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-43-访问者模式(源码剖析篇)
java·设计模式·访问者模式·源码分析·elementvisitor·asm classvisitor·spring spel
Michael_lcf3 天前
Agent设计模式:思考-行动-观察循环的本质与局限
设计模式·agent设计模式·agent设计模式的本质