工厂模式
工厂模式主要可分为三种:简单工厂,工厂方法,抽象工厂
简单工厂
提供实现方法的工厂
简单工厂主要有使用工厂的对象,工厂,具体实现类以及从实现类中抽象出的接口,如下图:
简单工厂的问题在于当具体实现类的增加,工厂的代码也得不断修改(增加),违反了开闭原则(OOP)
工厂方法
提供工厂的方法
具体来说有:工厂接口,产品接口,产品实现类,工厂实现类,使用类
- 每类产品都有自己的工厂,符合单一职责原则;
- 这类产品变化只改变这类产品的工厂,更符合开闭原则
但工厂方法也有自己的问题,就是每当新增一类产品时,就得多增加一个工厂,当产品种类非常多时,就会有非常多的工厂,这会导致代码变得复杂和难以维护.
抽象工厂
提供组合工厂的方法
具体来说有:抽象工厂工厂,产品接口,产品实现
举个例子,我要代工生产的产品有电脑,路由器……等产品,这些产品的制造方法在抽象工厂接口被定义,根据具体的品牌分别创建不同品牌的工厂,像小米工厂,华为工厂,vivo工厂等,产品的制造方法在具体品牌的工厂实现,这些产品实现也实现了具体的产品接口,华为手机实现手机接口,制造华为手机的方法返回华为手机,实现制造手机接口,每种产品都是如此。
优点:
- 可以确保同一工厂生成的产品相互匹配。
- 可以避免客户端和具体产品代码的耦合。
- 单一职责原则:可以将产品生成代码抽取到同一位置,使得代码易于维护。
- 原则:向应用程序中引入新产品变体时,无需修改客户端代码
缺点:
-全新品类产品难以扩展:本来只准备生产电脑,路由器,现在又要添加手表这类产品,从抽象工厂开始的所有往底层所有代码都要修改。