工厂模式

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

工厂模式分为三类

简单工厂模式(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();
    }
}
相关推荐
ZHE|张恒5 小时前
设计模式(十四)模板方法模式 — 定义流程骨架,把步骤差异留给子类
设计模式·模板方法模式
Codebee6 小时前
深度解析AI编程技术:从原理到实践,手把手教你落地
人工智能·设计模式·开源
执笔论英雄6 小时前
【RL】python协程
java·网络·人工智能·python·设计模式
boonya7 小时前
Java中Plugin设计模式的规范应用
java·spring·设计模式·插件模式
L***p3137 小时前
Spring Boot 经典九设计模式全览
java·spring boot·设计模式
MC丶科9 小时前
Java设计模式漫画英雄宇宙-观察者模式 —— Watcher女侠与“消息广播网”!
观察者模式·设计模式
stormsha10 小时前
Java 设计模式探秘饿汉式与懒汉式单例模式的深度解析
java·单例模式·设计模式·java-ee
f***453210 小时前
Spring Boot 经典九设计模式全览
java·spring boot·设计模式
口袋物联16 小时前
设计模式之单例模式在 C 语言中的应用(含 Linux 内核实例)
c语言·单例模式·设计模式
__万波__16 小时前
二十三种设计模式(一)--单例模式
java·单例模式·设计模式