抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口
- 抽象工厂模式则重的是同一产品族
- 工厂方法模式更加侧重于同一产品等级
接口ComputerFactory
package com.demo.pattern.abstractf;
import com.demo.pattern.factory.entity.Keyboard;
import com.demo.pattern.factory.entity.Mouse;
public interface ComputerFactory {
Mouse createMouse();
Keyboard createKeyboard();
}
HpComputerFactory
package com.demo.pattern.abstractf;
import com.demo.pattern.factory.entity.HpKeyboard;
import com.demo.pattern.factory.entity.HpMouse;
import com.demo.pattern.factory.entity.Keyboard;
import com.demo.pattern.factory.entity.Mouse;
public class HpComputerFactory implements ComputerFactory {
@Override
public Mouse createMouse() {
return new HpMouse();
}
@Override
public Keyboard createKeyboard() {
return new HpKeyboard();
}
}
AbstractFactoryDemo
package com.demo.pattern.abstractf;
import com.demo.pattern.factory.entity.Keyboard;
import com.demo.pattern.factory.entity.Mouse;
public class AbstractFactoryDemo {
public static void main(String[] args) {
ComputerFactory cf = new HpComputerFactory();
Mouse mouse = cf.createMouse();
Keyboard keyboard = cf.createKeyboard();
mouse.sayHi();
keyboard.sayHello();
}
}
解决了工厂模式只支持生产一种产品的弊端
- 新增一个产品族,只需要增加一个新的具体工厂,不需要修改代码
对工厂模式进行了抽象
工厂方法模式:每个抽象产品派生多个具体产品类,每个抽象工厂类派生多个具体工厂类,每个具体工厂类负责一个具体产品的实例创建
抽象工厂模式:每个抽象产品派生多个具体产品类,每个抽象工厂派生多个具体工厂类,每个具体工厂负责一系列具体产品的实例创建
可行性调研:当更多类型的Controller被加入到工程时
- 添加新产品时依旧违背开闭原则,增加系统复杂度
工厂模式相关的牌已打完
- 结合了工厂模式和反射机制的Spring IOC容器值得借鉴