创建型模式之工厂方法模式

之前一文讲了简单工厂模式,但是它并不满足OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。我的理解是,对于一个已有的软件,如果需要扩展,应当在不需修改已有代码的基础上进行。比如此时我需要生产一个踢中场的足球运动员,这样就需要去修改青训营这个类了。所以,简单工厂是不满足OCP原则的。

工厂方法模式为此提供了一种解决方案,就是对工厂进行泛化。


public interface SoccerPlayer
{
	public void Run();
	public void Jump();
}

///前锋
public class Forward : SoccerPlayer
{
	public void Run()
	{
	}
	public void Jump()
	{
	}
}

///后卫
public class Defender : SoccerPlayer
{
	public void Run()
	{
	}
	public void Jump()
	{
	}
}

///青训营
public interface YouthCamp
{
	void SoccerPlayer ProduceSoccerPlayer();
}

///前锋青训营
public class ForwardYouthCamp : YouthCamp
{
	public void SoccerPlayer ProduceSoccerPlayer()
	{
		return new Forward();
	}
}

///后卫青训营
public class DefenderYouthCamp : YouthCamp
{
	public void SoccerPlayer ProduceSoccerPlayer()
	{
		return new Defender();
	}
}

///国家队
public class NationalTeam
{
	private SoccerPlayer Forward;
	private SoccerPlayer Defender;
	
	public void test()
	{
		YouthCamp forwardYouthCamp = new ForwardYouthCamp();
		YouthCamp defenderYouthCamp = new DefenderYouthCamp();
		this.Forward=forwardYouthCamp.ProduceSoccerPlayer();
		this.Defender=defenderYouthCamp.ProduceSoccerPlayer();
		this.Forward.Run();
		this.Defender.Jump();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值