定义:定义一个创建对象的接口,但由子类决定实例化哪一个类 类比:一家饮料工厂可以生产不同口味的饮料,橙汁、可乐、柠檬水等,但工厂的生产线是一样的。不同口味由具体的生产方法决定 应用场景 在代码中指定实现类时机不明确,或者想要在运行时动态决定具体实现 客户端不需要知道所创建对象的具体类 优缺点 优点: 提供一种创建对象的更灵活的方式 客户端无需知道所创建对象的具体类,符合开闭原则 缺点: 增加代码复杂性,增加了系统中类的数量 实现代码 interface Product { operation(): string; } class ConcreteProductA implements Product { public operation(): string { return 'Result of ConcreteProductA'; } } class ConcreteProductB implements Product { public operation(): string { return 'Result of ConcreteProductB'; } } abstract class Creator { public abstract factoryMethod(): Product; public someOperation(): string { const product = this.factoryMethod(); return `Creator: The same creator's code has just worked with ${product.operation()}`; } } class ConcreteCreatorA extends Creator { public factoryMethod(): Product { return new ConcreteProductA(); } } class ConcreteCreatorB extends Creator { public factoryMethod(): Product { return new ConcreteProductB(); } } function clientCode(creator: Creator) { console.log(creator.someOperation()); } clientCode(new ConcreteCreatorA()); clientCode(new ConcreteCreatorB());