设计模式与应用:简单工厂模式

本文介绍简单工厂、使用场景

简介

简单工厂模式属于类的创建型模式,又叫静态工厂方法模式。

通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类

角色和职责

  • 工厂角色(Creator):核心。负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象
  • 抽象角色(Product):工厂创建所有对象的父类。负责描述所有实例所有共有的公共接口
  • 具体产品(Concrete Product):工厂创建的具体实例对象

实现

简单工厂模式

抽象接口

package com.mym.designmodel.SimpleFactory;

/**
 * 职责:product 抽象对象
 */
public interface Animal {

    public void shout();//定义动物的喊叫方法
}

具体实例对象类1


package com.mym.designmodel.SimpleFactory;

/**
 * 职责:concreteProduct 具体对象
 */
public class Cat implements Animal{

    @Override
    public void shout() {
        System.out.println("喵喵!");
    }
}

具体实例对象类2

package com.mym.designmodel.SimpleFactory;

/**
 * 职责:concreteProduct 具体对象
 */
public class Dog implements Animal {
    @Override
    public void shout() {
        System.out.println("汪汪!");
    }
}

工厂类:这里提供两种方式生产实例。一般使用的是第一种,适应性更强。第二种虽然扩展性强,但是束缚了适应性

package com.mym.designmodel.SimpleFactory;

/**
 * 职责:简单工厂
 */
public class SimpleFactory {

    public static Animal getAnimal1(String type){
        if("dog".equalsIgnoreCase(type)){
            return new Dog();
        }else if("cat".equalsIgnoreCase(type)){
            return new Cat();
        }else{
            System.out.println("没有相应的实例对象!");
            return null;
        }
    }

    public static Animal getAnimal2(String className) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        return (Animal) Class.forName(className).newInstance();
    }
}

测试

package com.mym.designmodel.SimpleFactory;

/**
 * 测试
 */
public class MainClass {
    public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
        Animal dog = SimpleFactory.getAnimal1("dog");
        Animal cat = SimpleFactory.getAnimal1("cat");
        dog.shout();
        cat.shout();

        System.out.println("----------------------");

        Animal dog2 = SimpleFactory.getAnimal2("com.mym.designmodel.SimpleFactory.Dog");
        Animal cat2 = SimpleFactory.getAnimal2("com.mym.designmodel.SimpleFactory.Cat");
        dog2.shout();
        cat2.shout();
    }

}

执行:

汪汪!
喵喵!
----------------------
汪汪!
喵喵!

简单工厂模式优缺点

优点

工厂类是核心。它包含必要的判断逻辑,能够根据外界给定的信息决定创建哪个具体类的对象。用户在使用时可以知己根据工厂类去创建所需实例,而无需了解这些对象如何创建如何组织。有利于整个软件体系结构的优化。

缺点

同样体现在其工厂类上,它集中所有实例的创建逻辑。所以“高内聚”方面坐的并不好。另外当系统具体产品不断增多,可能会要求工厂类也做相应的修改。扩展性不好。

使用场景

  • dao层对应各个数据库的支持

  • 可以使用在模块开发中,工厂相当于一个借口,其他使用者只管从工厂中拿对象,对相关的生产和类型由工厂的维护者或者对象的创建者维护。

计算器的简单工厂模式实现思路

(1)首先加减乘除操作在客户端写,代码冗余,并且是面向过程的思路
(2)把加减乘除操作提炼出来到一个操作工厂中。客户端只需要调用工厂中的操作方法即可,内部操作由工厂实现。

可查看:工厂方法模式

猜你喜欢

转载自blog.csdn.net/maoyuanming0806/article/details/80213176