返回

** 抽象工厂模式:让复杂业务对象创建变得简单

Android

Android设计模式(3)——抽象工厂模式

SEO关键词:

正文:

引子

在软件开发中,随着业务复杂度的增加,我们需要设计模式来处理复杂对象的创建和管理。抽象工厂模式作为工厂方法模式的延伸,为创建多个相关对象家族提供了一种灵活而可扩展的解决方案。

抽象工厂模式的原理

抽象工厂模式的核心在于将对象的创建过程抽象为一个接口。通过实现这个接口,我们可以创建不同的工厂类,每个工厂类负责创建特定类型的对象家族。

具体来说,抽象工厂模式包含以下几个关键元素:

  • 抽象工厂 :定义创建不同类型对象家族的接口。
  • 具体工厂 :实现抽象工厂接口,负责创建特定类型的对象家族。
  • 抽象产品 :定义对象家族中各个产品的接口。
  • 具体产品 :实现抽象产品接口,代表对象家族中具体的某个产品。

优势

抽象工厂模式提供了许多优势,包括:

  • 可扩展性 :通过添加新的具体工厂,可以轻松扩展应用程序以支持新的对象类型,而无需修改现有代码。
  • 模块化 :将对象创建过程与具体产品解耦,提高了代码的可维护性和可复用性。
  • 高内聚 :每个具体工厂只负责创建特定类型的对象家族,职责清晰,内聚性高。
  • 低耦合 :客户端代码只与抽象工厂接口交互,与具体工厂无关,降低了代码之间的耦合度。

应用场景

抽象工厂模式广泛应用于以下场景:

  • 需要创建多个相关对象家族时。
  • 对象创建过程复杂或需要灵活配置时。
  • 想要将对象的创建与具体实现解耦时。

示例

以制造汽车为例,我们可以使用抽象工厂模式来创建不同型号的汽车。抽象工厂定义了创建左侧和右侧车门的接口,具体工厂则实现该接口,负责创建特定型号的车门。

// 抽象工厂
interface CarFactory {
    LeftDoor createLeftDoor();
    RightDoor createRightDoor();
}

// 具体工厂(宝马)
class BMWCarFactory implements CarFactory {
    @Override
    public LeftDoor createLeftDoor() {
        return new BMWLeftDoor();
    }

    @Override
    public RightDoor createRightDoor() {
        return new BMWRightDoor();
    }
}

// 具体工厂(奔驰)
class MercedesCarFactory implements CarFactory {
    @Override
    public LeftDoor createLeftDoor() {
        return new MercedesLeftDoor();
    }

    @Override
    public RightDoor createRightDoor() {
        return new MercedesRightDoor();
    }
}

// 抽象产品(左侧车门)
interface LeftDoor {
    void open();
    void close();
}

// 具体产品(宝马左侧车门)
class BMWLeftDoor implements LeftDoor {
    @Override
    public void open() {
        System.out.println("BMW左侧车门打开");
    }

    @Override
    public void close() {
        System.out.println("BMW左侧车门关闭");
    }
}

// 具体产品(奔驰左侧车门)
class MercedesLeftDoor implements LeftDoor {
    @Override
    public void open() {
        System.out.println("奔驰左侧车门打开");
    }

    @Override
    public void close() {
        System.out.println("奔驰左侧车门关闭");
    }
}

// 抽象产品(右侧车门)
interface RightDoor {
    void open();
    void close();
}

// 具体产品(宝马右侧车门)
class BMWRightDoor implements RightDoor {
    @Override
    public void open() {
        System.out.println("BMW右侧车门打开");
    }

    @Override
    public void close() {
        System.out.println("BMW右侧车门关闭");
    }
}

// 具体产品(奔驰右侧车门)
class MercedesRightDoor implements RightDoor {
    @Override
    public void open() {
        System.out.println("奔驰右侧车门打开");
    }

    @Override
    public void close() {
        System.out.println("奔驰右侧车门关闭");
    }
}

// 客户端
public class Main {
    public static void main(String[] args) {
        // 创建宝马汽车工厂
        CarFactory bmwFactory = new BMWCarFactory();

        // 创建奔驰汽车工厂
        CarFactory mercedesFactory = new MercedesCarFactory();

        // 创建宝马汽车
        LeftDoor bmwLeftDoor = bmwFactory.createLeftDoor();
        RightDoor bmwRightDoor = bmwFactory.createRightDoor();

        // 创建奔驰汽车
        LeftDoor mercedesLeftDoor = mercedesFactory.createLeftDoor();
        RightDoor mercedesRightDoor = mercedesFactory.createRightDoor();

        // 打开和关闭车门
        bmwLeftDoor.open();
        bmwRightDoor.open();
        mercedesLeftDoor.open();
        mercedesRightDoor.open();

        bmwLeftDoor.close();
        bmwRightDoor.close();
        mercedesLeftDoor.close();
        mercedesRightDoor.close();
    }
}

总结

抽象工厂模式是一种强大的设计模式,它可以帮助我们解决复杂对象创建和管理的问题。通过将对象的创建过程抽象化,我们可以实现业务对象的解耦和复用,提高代码的可扩展性、模块化和维护性。