java 生产设计模式_java设计模式-工厂设计模式

工厂设计模式是创建型设计模式,有三种设计方法:简单工厂(产品父类),工厂模式(工厂父类),抽象工厂(父类接口)

一、简单工厂

简单工厂的设计思想是:

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();

}

}

总结:个人觉得工厂方法模式是最方便,最有效的设计模式,抽象工厂没明白好在哪。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值