千峰Java教程:064. 简单工厂模式

15、简单工厂模式

简单工厂模式是由一个工厂对象决定创建出哪一种产品的实例。简单工厂模式是工厂模式家族中最简单的实用模式。

如果没有工厂模式情况下,我们需要用一个对象的话,我们要这样去用:

public class Demo1
{
	public static void main(String[] args)
	{
		//我们想要用下面两个产品:用父类的引用指向子类的引用
		Prodect phone = new Phone();
		phone.work();
	}
}

interface Prodect
{
	public void work();
}

//然后我们有好几个不同的产品:
class Phone implements Prodect
{
	public void work()
	{
		System.out.println("手机开始工作...");
	}
}
class Computer implements Prodect
{
	public void work()
	{
		System.out.println("电脑开始工作...");
	}
}
/*
结果:
手机开始工作...
*/

但是,我们有没有能用更好的方式来实现这样的方法呢?

我们可以看到,在Demo1中,new了一个Phone类,意思就是说,Demo1类跟Phone类相互依赖。以来有什么后果呢,如果Phone类发生了变化,Demo1中的Phone类就会被报错。这时候就有了工厂模式,使用工厂模式来降低两者之间的依赖。下面的工厂类就是降低依赖的方式,然后改一下声明的主函数就行了:

public class Demo1
{
	public static void main(String[] args)
	{
		//我们想要用下面两个产品:用父类的引用指向子类的引用
		//Prodect phone = new Phone();
		Prodect phone = ProductFactory.getProduct("phone");
		phone.work();
		Prodect computer = ProductFactory.getProduct("computer");
		computer.work();
		Prodect abc = ProductFactory.getProduct("abc");
		abc.work();
	}
}

interface Prodect
{
	public void work();
}

//然后我们有好几个不同的产品:
class Phone implements Prodect
{
	public void work()
	{
		System.out.println("手机开始工作...");
	}
}
class Computer implements Prodect
{
	public void work()
	{
		System.out.println("电脑开始工作...");
	}
}

//所以我们加入一个工厂类:
class ProductFactory
{
	public static Prodect getProduct(String name)//这里要加上静态static,不然主函数无法引用
	{
		if("phone".equals(name))
		{
			return new Phone();
		}
		else if("computer".equals(name))
		{
			return new Computer();
		}
		else
		{
			return null;
		}
	}
}
/*
结果:
手机开始工作...
电脑开始工作...
Exception in thread "main" java.lang.NullPointerException
	at Demo1.main(Demo1.java:12)
*/

我们可以看第11行,由于没有类是abc,所以在输出时,会出现空指针错误。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值