之前一文讲了简单工厂模式,但是它并不满足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();
}
}