在正介绍上面的几个设计模式之前,先让我们来了解一下几个设计原则:
①OCP:(开放封闭原则,Open-Closed Principle)对于扩展是开放的,对于更改是封闭的。我的理解,对于一个系统,如果要扩展,应该在不修改已有代码的基础上进行。
②DIP(依赖倒转原则,Dependence Inversion Principle):针对接口编程,不要对实现编程。通俗一点,就是,对于不同层次的编程,高层次暴露给低层次的应当只是接口,而不是具体的类。
简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。主要功能就是帮助我们把对象的实例化部分抽取了出来,从而优化了代码的架构,并且增强了系统的扩展性。
·简单工厂
简单工厂的工厂类一般是使用静态方法,通过接收的参数不同来返回不同的实例。但是如果要想实现扩展的话,就需要更改源代码了。所以这一点是不符合我们说得OCP原则的。简单工厂中,包括一个“抽象产品类”,可以是class也可以是Interface,所有需要的产品类都是该“抽象产品类”的子类。简单工厂一般只包含一个具体的工厂类,由该工厂类生成所有产品类的对象。其内部一般是switch语句,根据输入参数的不同,创建不同的对象。
·工厂方法
工厂方法是通过针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例,在同一等级结构中,支持增加任意产品。这弥补了简单工厂的不足,而且满足了DIP原则。
对于工厂方法,也有一个“抽象产品类”,但是他把简单工厂类中的抽象工厂类写成了一个接口,然后将每个产品写成一个工厂,用来实例化自身的产品。怎样如果要怎加产品的话,直接编写一个该产品的工厂就可以了。
·抽象工厂
抽象工厂和工厂方法还是很相似的,它有过个抽象产品类,每个抽象产品类可以派生出多个具体的产品;一个抽象工厂类,可以派生多个具体的工厂类。每个具体工厂类可以创建多个具体产品类的实例。
它和工厂方法的区别在于:
工厂方法只有一个抽象产品类,而抽象工厂有多个;
工厂方法的具体工厂类只能创建一个具体产品类的实例,而抽象工厂可以创建多个。