简单工厂

2019-01-24  本文已影响0人  熊猫派

在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

包括三个角色:
-Factory:工厂角色
-Product:抽象产品角色
-ConcreteProduct:具体产品角色
UML类图:


SimpleFactory.jpg

抽象产品角色

public abstract class Product  {
    //所有产品类的公共业务方法
    public void methodSame() {
        //公共方法的实现
    }
    //声明抽象业务方法
    public abstract void methodDiff();
}

具体产品

//具体产品A
public class ConcreteProductA extends Product {
    // 产品A实现方法
    @Override
    public void methodDiff() {

    }
}
//具体产品B
public class ConcreteProductB extends Product {
    //产品B实现方法
    @Override
    public void methodDiff() {

    }
}

工厂角色

//工厂角色
public class Factory {

    public static Product getProduct(String productType){
        Product product = null;
        if (productType.equalsIgnoreCase("A")) {
            product = new ConcreteProductA();
            //初始化设置product
        }
        else if (productType.equalsIgnoreCase("B")) {
            product = new ConcreteProductB();
            //初始化设置product
        }
        return product;
    }
}

客户端

//客户端简单工厂使用
public class Client {
    public static void main(String[] args) {
        Product product = Factory.getProduct("A");
        product.methodSame();
        product.methodDiff();
    }
}

简单工厂模式的优点

1.实现了对责任的分割,提供了专门的工厂类用于创建对象。
2.客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可。
3.可以在不修改任何客户端代码的情况下更换和增加新的具体产品类。

简单工厂模式的缺点

1.工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
2.增加系统中类的个数。增加了系统的复杂度和理解难度。
3.系统扩展困难,一旦添加新产品就不得不修改工厂逻辑。
4.由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。

适应环境

1.客户端只知道传入工厂类的参数,对于如何创建对象不关心。
2.工厂类负责创建的对象比较少。

参考:
https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/simple_factory.html#id23

上一篇 下一篇

猜你喜欢

热点阅读