工厂模式

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

工厂模式分为三类

简单工厂模式(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();
    }
}
相关推荐
幂简集成explinks1 天前
e签宝签署API更新实战:新增 signType 与 FDA 合规参数配置
后端·设计模式·开源
大飞pkz1 天前
【设计模式】C#反射实现抽象工厂模式
设计模式·c#·抽象工厂模式·c#反射·c#反射实现抽象工厂模式
努力也学不会java1 天前
【设计模式】抽象工厂模式
java·设计模式·oracle·抽象工厂模式
青草地溪水旁1 天前
设计模式(C++)详解—抽象工厂模式 (Abstract Factory)(2)
c++·设计模式·抽象工厂模式
青草地溪水旁1 天前
设计模式(C++)详解—抽象工厂模式 (Abstract Factory)(1)
c++·设计模式·抽象工厂模式
Magnetic_h1 天前
【iOS】设计模式复习
笔记·学习·ios·设计模式·objective-c·cocoa
A阳俊yi2 天前
设计模式——结构型模式
设计模式
努力也学不会java2 天前
【设计模式】状态模式
java·设计模式·状态模式
.豆鲨包2 天前
【设计模式】单例模式
java·单例模式·设计模式