工厂设计模式是创建型设计模式,有三种设计方法:简单工厂(产品父类),工厂模式(工厂父类),抽象工厂(父类接口)
一、简单工厂
简单工厂的设计思想是:
1、定义一个产品的父类
2、具体产品类继承父类
3、定义具体工厂,定义静态方法创造产品,使用产品父类作为静态方法的返回值类型。方法中使用switch或if语句,根据用户传入的参数类型,返回不同的产品。
也可以是用反射的方法,参数类型设为class类型,最终得到所要的产品对象。
缺点:代码被写死,要想要增加产品,不仅需要新增产品类,还需要修改工厂类提供的产品类型,和生产产品的方法
二、工厂模式
工厂模式的设计思想
1、定义一个抽象的工厂的父类
2、定义具体工厂,继承抽象的父类工厂(一个工厂只能生产一种产品)
缺点:由于java中单继承的特点,每种工厂只能继承一个父类,也就是说只能生产一种产品。
三、抽象工厂
1、定义n个生产产品的工厂接口
2、定义具体工厂,这个工厂需要生产什么产品就继承对应的接口
优点:可以生产多种产品
简单工厂的代码实现如下:
/*** 第一步:定义产品的基类*/
public abstract classLight{public abstract voidcreate();
}/*** 第二步:定义定义产品的具体类,继承产品基类*/
public class CeilingLamp extendsLight {public voidcreate(){
System.out.print("生产一个吸顶灯");
}
}public class DropLight extendsLight {public voidcreate(){
System.out.print("生产一个吊灯");
}
}public class TableLamp extendsLight {public voidcreate(){
System.out.print("生产一个台灯");
}
}/*** 第三步:定义工厂类,提供静态方法,根据实参生产所需产品*/
public classSimpleFactory {final static int DROP_LIGHT = 1;final static int CEILING_LAMP = 2;final static int TABLE_LAMP = 3;//静态方法
public static Light LightFactory(inttype) {switch(type) {caseDROP_LIGHT:return newDropLight();caseCEILING_LAMP:return newCeilingLamp();caseTABLE_LAMP:return newTableLamp();default:return newDropLight();
}
}
}
工厂方法模式的实代码如下:
/*** 定义工厂,要生产什么产品,就直接使用静态方法返回就行*/
public classFactoryMethods {/*** 生产吊灯的静态方法
*@return
*/
public staticLight creDropLight(){return newDropLight();
}/*** 生产吸顶灯的静态方法
*@return
*/
public staticLight creCeilingLamp(){return newCeilingLamp();
}/*** 生台灯的静态方法
*@return
*/
public staticLight creTableLamp(){return newTableLamp();
}
}
抽象工厂模式代码如下:
/*** 第一步:定义灯工厂的基类*/
public abstract classLigthFactory {public abstract voidcreate();
}/*** 第二步:定义灯工厂的具体类,继承灯工厂*/
public class CeilingLamp extendsLight {public voidcreate(){
System.out.print("生产一个吸顶灯");
}
}public class DropLight extendsLigthFactory {public voidcreate(){
System.out.print("生产一个吊灯");
}
}public class TableLamp extendsLight {public voidcreate(){
System.out.print("生产一个台灯");
}
}/***第三步:定义五金工厂的基类*/
public abstract classMetalsFactory {public abstract voidcreate();
}/*** 第四步:定义具体工厂,继承抽象五金工厂*/
public class LaundryRackFactory extendsMetalsFactory {public voidcreate(){
System.out.print("生产一个晾衣架");
}
}public class WaterFaucetFactory extendsMetalsFactory {public voidcreate(){
System.out.print("生产一个水龙头");
}
}/*** 第五步:定义工厂多功能工厂的基类,提供继承该基类的工厂所能卖的东西类型的方法*/
public abstract classFactory {public abstractLigthFactory createLigths();public abstractMetalsFactory createMetals();
}/*** 第六步:定义具体多功能工厂类,实现抽象多功能工厂,可卖各种东西*/
public class MutiFactory extendsFactory{publicLigthFactory createLigths(){return newDropLight();
}publicMetalsFactory createMetals(){return newWaterFaucetFactory();
}
}
总结:个人觉得工厂方法模式是最方便,最有效的设计模式,抽象工厂没明白好在哪。