简单工厂模式

2018-03-25  本文已影响13人  Cloverss

这里引用别人的一些介绍,自己总结不粗来- -

部分摘录自me115,xingjiarong,具体可以参考来源

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式(同属于创建型模式的还有工厂方法模式,抽象工厂模式,单例模式,建造者模式)。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

核心角色有三个: 工厂(Creator)抽象产品(AbstractProduct),具体产品(ConcreteProduct)

工厂(Creator):简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。以java 为例,工厂角色的具体形式是提供一个工厂类,然后提供一个静态的public方法,通过传入的参数不同来 new 或者 创建不同的实例对象。

具体产品(ConcreteProduct):简单工厂模式的创建目标,即对应我们创建的具体实例对象。

抽象产品(AbstractProduct):简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

工厂角色代码,以Kotlin 为例

class FruitFactory {

    companion object {

        fun create(type: String): Fruit? {

            return when (type) {
                "Apple" -> Apple()
                "Pear" -> Pear()
                "Banana" -> Banana()
                else -> null
            }
        }
    }
}

抽象产品角色代码

abstract class Fruit{
    abstract fun eat()
}

具体产品角色 代码

class Apple : Fruit() {

    init {
        println("create an apple")
    }

    override fun eat() {
        println("eat an apple")
    }

}


class Pear : Fruit() {

    init {
        println("create a pear")
    }

    override fun eat() {
        println("eat a pear")
    }

}


class Banana : Fruit() {

    init {
        println("create a banana")
    }

    override fun eat() {
        println("eat a banana")
    }

}

简单工厂模式优点与与缺点:

优点:

缺点:

适用环境

模式应用

JDK类库中广泛使用了简单工厂模式,如工具类java.text.DateFormat,它用于格式化一个本地日期或者时间。

public final static DateFormat getDateInstance();
public final static DateFormat getDateInstance(int style);
public final static DateFormat getDateInstance(int style,Locale locale);

总结

  1. 创建型模式对类的实例化过程进行了抽象,能够将对象的创建与对象的使用过程分离。
  2. 简单工厂模式又称为静态工厂方法模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
  3. 简单工厂模式包含三个角色:工厂角色负责实现创建所有实例的内部逻辑;抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口;具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。
  4. 简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。
  5. 简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。
  6. 简单工厂模式适用情况包括:工厂类负责创建的对象比较少;客户端只知道传入工厂类的参数,对于如何创建对象不关心。
上一篇 下一篇

猜你喜欢

热点阅读