工厂模式

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

工厂模式分为三类

简单工厂模式(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();
    }
}
相关推荐
阿闽ooo11 小时前
抽象工厂模式实战:用C++打造家具生产系统(附UML图与完整代码)
c++·设计模式·抽象工厂模式·uml
是店小二呀11 小时前
DanceGRPO+FLUX:多模态生成强化学习模型的高效
设计模式
明洞日记11 小时前
【设计模式手册022】抽象工厂模式 - 创建产品家族
java·设计模式·抽象工厂模式
阿拉斯攀登12 小时前
设计模式:命令模式(Spring MVC中的实践)
设计模式·springmvc·命令模式
明洞日记12 小时前
【设计模式手册021】代理模式 - 如何控制对象访问
设计模式·系统安全·代理模式
山沐与山13 小时前
【设计模式】Python策略模式:从入门到实战
python·设计模式·策略模式
阿拉斯攀登13 小时前
设计模式:责任链模式(mybatis数据权限实现)
设计模式·mybatis·责任链模式
syt_101313 小时前
设计模式之-模板模式
设计模式
阿拉斯攀登13 小时前
设计模式:责任链模式(MyBatis)
设计模式·mybatis·责任链模式
崎岖Qiu14 小时前
【设计模式笔记19】:建造者模式
java·笔记·设计模式·建造者模式