如何使用Lambda表达式实现工厂模式?代码举例讲解

工厂模式定义一个接口或抽象类,用于创建相关或依赖对象的家族,而不需要指定具体类。Lambda 表达式可以很好地实现简单的工厂模式。我们来看一个例子:
假设我们有一个游戏,需要创建不同的游戏角色。这是一个典型的使用工厂模式的场景。

使用 Lambda 表达式实现工厂模式:

// 游戏角色接口  
interface GameCharacter {
    void fight();
}

// 具体的游戏角色实现
class Warrior implements GameCharacter {
    @Override
    public void fight() {
        System.out.println("盖世武者开始战斗!");
    }
} 

class Magician implements GameCharacter {
    @Override
    public void fight() {
        System.out.println("魔法师释放魔法!");
    }
}

// 工厂接口  
@FunctionalInterface 
interface CharacterFactory { 
    GameCharacter createCharacter();
}

// 工厂实现
CharacterFactory warriorFactory = () -> new Warrior();
CharacterFactory magicianFactory = () -> new Magician();  

// 使用工厂创建游戏角色
GameCharacter warrior = warriorFactory.createCharacter();
warrior.fight();  // 盖世武者开始战斗!

GameCharacter magician = magicianFactory.createCharacter(); 
magician.fight(); // 魔法师释放魔法!

这里我们定义了一个 CharacterFactory 接口作为工厂,其中 createCharacter() 方法用于创建游戏角色。warriorFactory 和 magicianFactory 是两种具体的工厂实现。通过调用这些工厂,我们可以创建不同类型的游戏角色。

所以,这是一个使用 Lambda 表达式实现简单工厂模式的示例。相比匿名内部类,Lambda 表达式使代码更加简洁。但是,如果工厂创建的对象较为复杂,Lambda 表达式的可读性就较低,这时还是选择其他方式实现工厂模式更为合适。