设计模式之-简单工厂模式

2019-07-22  本文已影响0人  MengkZhang

1. 含义

2. 解决的问题

将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,实现了解耦

3. 模式原理

3.1 模式组成

3.2 UML类图

3.3 使用步骤

4. 实例

使用步骤

步骤1. 创建抽象产品类,定义具体产品的公共接口

/**
 * Created by zhang on 2019/7/22 0022.
 * Desc:
 */

public abstract class Product {
    public abstract void show();
}

步骤2. 创建具体产品类(继承抽象产品类),定义生产的具体产品

/**
 * Created by zhang on 2019/7/22 0022.
 * Desc: 具体产品类A
 */

public class ProductA extends Product {
    @Override
    public void show() {
        Log.e("===z","生产了产品A");
    }
}
/**
 * Created by zhang on 2019/7/22 0022.
 * Desc: 具体产品类B
 */

public class ProductB extends Product {
    @Override
    public void show() {
        Log.e("===z","生产了产品B");
    }
}
/**
 * Created by zhang on 2019/7/22 0022.
 * Desc: 具体产品类C
 */

public class ProductC extends Product {
    @Override
    public void show() {
        Log.e("===z","生产了产品C");
    }
}

步骤3. 创建工厂类,通过创建静态方法从而根据传入不同参数创建不同具体产品类的实例

/**
 * Created by zhang on 2019/7/22 0022.
 * Desc:
 */

public class Factory {
    public static Product manufacture(String productName) {
        //工厂类里用switch语句控制生产哪种商品;
        //使用者只需要调用工厂类的静态方法就可以实现产品类的实例化。
        switch (productName) {
            case "A":
                return new ProductA();

            case "B":
                return new ProductB();

            case "C":
                return new ProductC();

            default:
                return null;
        }
    }
}

步骤4. 外界通过调用工厂类的静态方法,传入不同参数从而创建不同具体产品类的实例

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Factory factory = new Factory();

        //客户要产品A
        try {
            //调用工厂类的静态方法 & 传入不同参数从而创建产品实例
            factory.manufacture("A").show();
        }catch (NullPointerException e){
            Log.e("===z","没有这一类产品");
        }

        //客户要产品B
        try {
            //调用工厂类的静态方法 & 传入不同参数从而创建产品实例
            factory.manufacture("B").show();
        }catch (NullPointerException e){
            Log.e("===z","没有这一类产品");
        }

        //客户要产品C
        try {
            //调用工厂类的静态方法 & 传入不同参数从而创建产品实例
            factory.manufacture("C").show();
        }catch (NullPointerException e){
            Log.e("===z","没有这一类产品");
        }

        //客户要产品D
        try {
            //调用工厂类的静态方法 & 传入不同参数从而创建产品实例
            factory.manufacture("D").show();
        }catch (NullPointerException e){
            Log.e("===z","没有这一类产品");
        }


    }

输出结果


5.优点缺点

优点

缺点

6.应用场景

OK 简单工厂到此为止 下期 我们讲工厂方法模式

上一篇 下一篇

猜你喜欢

热点阅读