创建型模式之工厂方法模式(java版)

1.引入:

由于简单工厂模式的缺点:创建的类完全依赖于工厂类,违反开闭原则。意思就是工厂类不能写死了,写死不容易程序扩展。

如果需要去工厂取斧头,采用简单工厂模式,实际就是把斧头的类型写死,但是如果用户要来个你们工厂没有的类型的斧头,那么就得把斧头的制造(具体产品),工厂类都修改。这样不方便。所以工厂方法模式就是解决这个问题,相对于简单工厂模式,需要从工厂类下手,通过接口和多个实现类的方式,把工厂类写的灵活。

如果不了解简单工厂模式,可以看这个简单工厂模式(java版)

2.工厂方法模式的实现:

--2.1提供制造斧头的接口(抽象产品):

//实现制造斧头的接口
public interface Axe {
	//制造
	public void make();
}

--2.2通过实现制造斧头的接口来制造出一把斧头(具体产品):

public class SteelAxe implements Axe{

	@Override
	public void make() {
		// TODO Auto-generated method stub
		System.out.println("制造出来了钢斧!");
	}

}
public class StoneAxe implements Axe{

	@Override
	public void make() {
		// TODO Auto-generated method stub
		System.out.println("制造出来了石斧!");
	}
}
public class WoodenAxe implements Axe{

	@Override
	public void make() {
		// TODO Auto-generated method stub
		System.out.println("制造出来了木斧!");
	}
}

--2.3.斧头提供给工厂的接口(抽象工厂)

public interface Provider {
	
	public Axe provide();
}

--2.4工厂通过实现接口,来根据用户的需要提供斧头(具体工厂)

public class SteelAxeFactory implements Provider{

	@Override
	public Axe provide() {
		// 创建钢斧
		return new SteelAxe();
	}
}
class StoneAxeFactory implements Provider{

	@Override
	public Axe provide() {
		// 创建石斧
		return new StoneAxe();
	}
	
}
class WoodenAxeFactory implements Provider{

	@Override
	public Axe provide() {
		//创建木斧
		return new WoodenAxe();
	}
	
}
2.5测试类:

public class AxeTest {

	public static void main(String[] args) {
		Provider provider=new SteelAxeFactory();
		Axe axe=provider.provide();
		axe.make();
	}
}

运行结果:

制造出来了钢斧!

-------------------------------------------------------------

3.总结:

这样如果用户需要金斧,就只需要定义一个具体产品GoldenAxe类并实现Axe接口,再定义一个GoldenAxeFactory类并实现Provider接口就完事了,其他的都不需要修改。扩展性提高。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值