设计模式——工厂模式(java)

工厂:顾名思义,生产,加工产品的地方

工厂模式:就是在软件中提供专门用来创建对象实例的类(相当于一个加工生产对象的工厂),对所有的new操作进行封装,当要实例化对象的时候,根据传入的参数决定要实例化哪一个对象。

工厂模式包括工厂方法模式抽象工厂模式

抽象工厂模式是工厂方法模式的扩展。


工厂方法模式:

我们要创建一个生产不同口味冰淇淋的工厂,首先所有口味的冰淇淋类都会有一个生成冰淇淋的方法,而这个方法就可以抽象为一个接口(IceCreamInterface),让不同口味的冰淇淋类实现该接口,最后还需要一个工厂类,根据传入的参数实例化不同口味的冰淇淋对象。


1. 制作冰淇淋的方法接口

//冰淇淋接口
public interface IceCreamInterface {
    //制作冰淇淋的方法
	public void createIceCream();
}

2. 实现接口的不同口味的冰淇淋类
//制作菠萝冰淇淋
public class PineappleCream implements IceCreamInterface {
	@Override
	public void createIceCream() {
		System.out.println("生成一个菠萝冰淇淋");
	}
}

//制作草莓冰淇淋
public class StrawberryCream implements IceCreamInterface {
	@Override
	public void createIceCream() {
		System.out.println("生成一个草莓冰淇淋");
	}
}

3. 冰淇淋工厂类,根据传入的字符串实例化冰淇淋对象

//生成冰淇淋的工厂
public class IceCreamFactory {
	//根据传入的name来判断需要创建哪个对象
	public IceCreamInterface getIceCream(String name){
		if("strawberry".equals(name)){
			return new StrawberryCream();
		}else if("pineapple".equals(name)){
			return new PineappleCream();
		}else{
			return null;
		}
	}
}

4. 调用工厂类实例化对象
IceCreamFactory factory1=new IceCreamFactory();
		//向上转型
		IceCreamInterface iceCream1=factory1.getIceCream("strawberry");
		if(iceCream1!=null){
			iceCream1.createIceCream();
		}
		
		iceCream1=factory1.getIceCream("pineapple");
		if(iceCream1!=null){
			iceCream1.createIceCream();
		}	


抽象工厂模式

我们要生产两种类别的冰淇淋,分别是蛋卷冰淇淋和纸杯冰淇淋,同时蛋卷冰淇淋还分手工和机器生产的两种,纸杯同样也分手工和机器的两种,于是我们要生产四种产品类型的冰淇淋(四个生成不同对象的类)。要建立两个工厂,一个是手工工厂用于生产手工冰淇淋(实例化手工产品的对象),一个是机器工厂用于生产机器冰淇淋(实例化机器产品的对象)。

1. 抽象生产纸杯冰淇淋方法为CupCream接口

//纸杯冰淇淋接口
public interface CupCream {
	public void createCupCream();
}
2. 实现接口的手工纸杯冰淇淋类和机器纸杯冰淇淋类

//手工纸杯冰淇淋
public class ManualCupCream implements CupCream{
	@Override
	public void createCupCream() {
		System.out.println("生成一个手工纸杯冰淇淋");
	}
}
//机器纸杯冰淇淋
public class MachineCupCream implements CupCream{
	@Override
	public void createCupCream() {
		System.out.println("生成一个机器纸杯冰淇淋");
	}
}
3. 抽象生产蛋卷冰淇淋方法为EggCream接口
//蛋卷冰淇淋接口
public interface EggCream {
	public void createEggCream();	
}
4. 实现接口的手工蛋卷冰淇淋类和机器蛋卷冰淇淋类
//手工蛋卷冰淇淋
public class ManualEggCream implements EggCream {
	@Override
	public void createEggCream() {
		System.out.println("生成一个手工蛋卷冰淇淋");
	}
}
//机器蛋卷冰淇淋
public class MachineEggCream implements EggCream {
	@Override
	public void createEggCream() {
		// TODO Auto-generated method stub
		System.out.println("生成一个机器蛋卷冰淇淋");
	}
}

5. 定义包装工厂接口,包括得到蛋卷冰淇淋和纸杯冰淇淋的抽象方法
//包装工厂接口
public interface WrappingFactroy {
	public EggCream  getEggCream();
	public CupCream getCupCream();
}

6. 实现包装工厂接口的手工工厂和机器工厂
//手工生产工厂
public class ManualFactory implements WrappingFactroy{
	@Override
	public EggCream getEggCream() {
		return new ManualEggCream();
	}
	@Override
	public CupCream getCupCream() {
		return new ManualCupCream();
	}
}
//机器生产工厂
public class MachineFactory implements WrappingFactroy{
	@Override
	public EggCream getEggCream() {
		return new MachineEggCream();
	}
	@Override
	public CupCream getCupCream() {
		return new MachineCupCream();
	}
}

7. 调用工厂类实例化对象
WrappingFactroy wrapping=new ManualFactory() ;
		EggCream eggCream=wrapping.getEggCream();
		eggCream.createEggCream();
		CupCream cupCream=wrapping.getCupCream();
		cupCream.createCupCream();
		
		wrapping=new MachineFactory();
		eggCream=wrapping.getEggCream();
		eggCream.createEggCream();
		cupCream=wrapping.getCupCream();
		cupCream.createCupCream();







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值