美文网首页
简单工厂

简单工厂

作者: 熊猫派 | 来源:发表于2019-01-24 16:14 被阅读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

    相关文章

      网友评论

          本文标题:简单工厂

          本文链接:https://www.haomeiwen.com/subject/zxzyjqtx.html