工厂模式

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

工厂模式分为三类

简单工厂模式(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();
    }
}
相关推荐
Zane19941 天前
一个 new 就能创建对象,为什么还要拆出单例、工厂、建造者、原型四种模式?
设计模式
怕浪猫2 天前
一行命令复刻爆款视频,我把 Hypit 从安装跑到了出片
人工智能·设计模式·程序员
Zane19942 天前
函数式编程里的函数,其实不是你天天写的那个函数——三大编程范式的边界在哪
设计模式
Zane19943 天前
策略模式现在该不该上?一次讲清楚过度设计和设计不足怎么找平衡
设计模式
她说..3 天前
常见设计模式-模板方法模式
java·spring·设计模式·springboot
xiaofeiyang1504 天前
第六章 · 桥接 — 三支毛笔,画出九种颜色
设计模式
Shadow(⊙o⊙)4 天前
OTOL设计模式 One Thread One Loop
服务器·网络·设计模式
sarasuki5 天前
如何让LLM 能在半夜偷偷打开网易云呢?
人工智能·设计模式·agent
小王师傅665 天前
【设计模式】装饰模式(四):框架源码实战——从 Java I/O 到 Spring 到 MyBatis
java·设计模式
执明wa5 天前
Android RecyclerView 多类型, 多种 Item
android·xml·开发语言·设计模式·android studio