1、介绍
简单工厂(SimpleFactory):一个工厂类可以创建不同的产品实例,不需要管每个产品的具体实现逻辑。比如说一个生产服装的工厂,其既可以生产衣服也可以生产裤子还可以生产帽子,只是其制造的过程不一致,所以当你去批发衣服的时候只需要去工厂拿衣服就行,而不需要知道具体的制造过程。
2、优缺点及适用场景
优点
- 易扩展,新增产品只要加一个具体实现类,再在工厂种实例化
- 结构清晰,使用者只要知道产品名字或参数就可以调用
缺点
- 它的易扩展性也是它的缺点,随着种类的增多,使得系统对具体类的依赖增多,从而增加了系统的复杂性
- 增加一个产品就要修改工厂类,而工厂类是已存在的类,对已存在的类进行修改就违背了开闭原则
使用场景
对于产品种类较少功能的适用
3、简单工厂的实现
下面是测试所以很多类写一起了,在实际开发中记得把接口和类放到独立的Java文件中
public class test {
public static void main(String[] args) {
//生产具体产品只需要知道产品类型编号就行了
SimpleFactory.produceProduct(0).produce();
SimpleFactory.produceProduct(1).produce();
SimpleFactory.produceProduct(2).produce();
//最好这样调用,因为如果没有这个产品将返回null
Product product=SimpleFactory.produceProduct(4);
if(product!=null) {
product.produce();
}
}
//一个产品接口
public interface Product {
void produce();
}
//生产衣服的类,实现一个产品的接口
static class Clothes implements Product {
public void produce() {
//具体逻辑
}
}
//生产裤子的类,实现一个产品的接口
static class Trousers implements Product {
public void produce() {
//具体逻辑
}
}
//生产帽子的类,实现一个产品的接口
static class Hat implements Product {
public void produce() {
//具体逻辑
}
}
//产品类型,如果增加了具体的产品,需要在此增加一个类型
final class ProductType {
static final int Clothes = 0;
static final int Trousers = 1;
static final int Hat = 2;
}
//简单工厂
static class SimpleFactory {
//根据类型实例化具体的产品类
public static Product produceProduct(int type) {
switch (type) {
case ProductType.Clothes:
return new Clothes();
case ProductType.Trousers:
return new Trousers();
case ProductType.Hat:
return new Hat();
}
return null;
}
}
}