1.简单工厂模式
简单工厂模式 描述了一个类, 它拥有一个包含大量条件语句的构建方法, 可根据方法的参数来选择对何种产品进行初始化并将其返回。
个人理解:具体就是在一个工厂类中,声明一个创建对象的构建方法,在方法里通过方法的参数来判断需要给哪个类创建对象,并使用此对象进行接下来的方法调用。
java代码示例:
创建一个ICar接口,定义汽车行驶的方法:
轿车和卡车两种产品都实现此接口:
定义一个汽车工厂,声明一个根据不同入参制造汽车的方法:
测试:
在这里,只需要创建CarFactory对象,用此对象调用制造汽车方法,根据需要传入不同的汽车类型来实现调用具体的方法。
2.工厂方法模式
个人理解:如果要制造的汽车类型越来越多,比如跑车,赛车,摩托车等等,而且每种车又增加了运输,比赛等方法,那么使用上述的简单工厂模式会导致这个工厂类的职责会越来越多,不符合单一职责原则,且工厂类不符合开闭原则,要新增一种产品需要修改原来的工厂类。因此可以对每种汽车类型又各新建一种工厂来专门处理这种类型的车,即对每种车型进行抽象分离。
java代码示例:
测试:
3.抽象工厂模式
个人理解:抽象工厂是更为复杂的一种模式,一般涉及到产品系列的话,会用到此种设计模式,例如汽车的1代,2代系列产品。
java代码示例:
1.先创建两代汽车的接口:
2.小轿车和卡车分别实现这两代车的接口(共4个产品:一代,二代轿车,一代,二代卡车):
3.创建汽车生产的工厂接口(可以生产一代,二代产品):
创建轿车和卡车的生产工厂,分别实现这个接口:
4.测试:
对于轿车和卡车分别创建工厂。对一代和二代汽车分别抽象,轿车和卡车对于两代产品分别实现。相比于抽象方法设计模式,多了一层对产品系列的抽象。
抽象工厂模式比较复杂,对抽象能力要求较高,需要加强理解和练习。