工厂模式定义一个接口或抽象类,用于创建相关或依赖对象的家族,而不需要指定具体类。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 表达式的可读性就较低,这时还是选择其他方式实现工厂模式更为合适。