我正在使用C#学习设计模式.我面临的挑战之一是它们看起来很相似.你能帮我区分一下 - 基本上什么时候使用它们? - 为什么不是另一个?
我知道网络上有很多可用的资源.但是他们没有对待这种特殊情况.
[注意:我正在寻找选择背后的实施例子和理由; 不仅仅是解释]
感谢您的答复.我更多地尝试学习Bridge.
我有以下场景.
在我的房间里有两台电视.每个人都有自己的遥控器; 但两者都有相同的界面供用户使用.但是我想拥有自己的遥控器,我将使用两个遥控器中的任何一个的处理器.
我有以下代码.我想,这是战略模式.我想把它转换成Bridge.
转换成Bridge后我会得到什么好处?
公共课PhilliTV {public void Begin(){Console.WriteLine("PhilliTV Bagan"); }}
public class SonTV
{
public void Initiate()
{
Console.WriteLine("SonTV Initiated");
}
}
public class SonRemote : IRemote
{
SonTV stv = new SonTV();
public void Play()
{
stv.Initiate();
}
}
public class PhilliRemote : IRemote
{
PhilliTV ptv = new PhilliTV();
public void Play()
{
ptv.Begin();
}
}
public class URemoteConsumer
{
IRemote remote = new PhilliRemote();
public void MyPlay()
{
remote.Play();
}
Run Code Online (Sandbox Code Playgroud)我可以为这个推荐Head First Design Patterns.从那本书:
国家与战略之间的区别在于意图.使用状态模式可以在对象的生命周期中动态地改变行为.它是全班if语句的替代方案.使用策略模式,通常在构造对象时执行一次.它是子类化的替代方案.行为很灵活,但对于agiven对象,您只需配置一次.
门面和战略彼此无关.该策略旨在在运行时配置行为(实现).Facade只是简化了现有界面.如果您有一个复杂的ATM系统,您可能需要2个接口.一个拥有所有权力,包括如何处理错误等的各种方法,以及一个可以更简单的前端调用的方法.前端代码不需要知道如何处理错误,其他地方的错误处理程序会处理错误.这将只需要知道,是一个错误.简化的界面(希望随着时间的推移也更加稳定)将使前端开发人员的生活更简单,并隐藏可能更改的元素.那是你制作门面的时候.您拥有功能齐全的界面,但大多数人只使用一个子集.该子集将成为Facade.
复合模式允许您将对象组合成树结构.我看不出你怎么看不到战略模式的差异.他们几乎没有任何共同之处.
也许有些想法实际使用这些模式:
我真的推荐Head First Design Patterns,因为他们甚至采访了各种模式!然后模式告诉我们自己,以及为什么它们是最好的模式:)