use*_*312 3 design-patterns open-closed-principle
我是设计模式的初学者.
我正在尝试使用抽象工厂模式,同时保持开放封闭原则.
Plz看下面的代码:
public interface IAbstractFormFactory
{
void ShowOSName();
}
public class VistaForm : IAbstractFormFactory
{
public void ShowOSName()
{
Console.WriteLine("Vista");
}
}
public class WinXpForm : IAbstractFormFactory
{
public void ShowOSName()
{
Console.WriteLine("Win XP");
}
}
public static class Application
{
public static void Run(IAbstractFormFactory factory)
{
factory.ShowOSName();
}
}
public class Program
{
public static void Main()
{
IAbstractFormFactory form;
int sys = 0;
if (sys == 0)
{
form = new WinXpForm();
}
else
{
form = new VistaForm();
}
Application.Run(form);
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
它可以作为抽象工厂模式的一个例子吗?
如果是,我如何重构开放封闭原则的概念呢?
您给出的示例不是抽象工厂.抽象工厂有工厂方法(即创建和返回对象的方法).
至于开放/封闭原则,抽象工厂模式固有地促进了这一点.代码是"关闭"的,因为如果你添加一个新工厂(因为你正在使用依赖注入)它不需要被修改,并且它是"开放的",因为你可以通过编写一个新的抽象工厂来扩展功能.
更新:以下是修改为显示抽象工厂的问题中的示例代码:
public interface IForm
{
void ShowFormName();
}
public interface IAbstractFormFactory
{
IForm MakeForm();
}
public class VistaForm : IForm
{
public void ShowFormName()
{
Console.WriteLine("Vista Form");
}
}
public class VistaFormFactory : IAbstractFormFactory
{
public IForm MakeForm()
{
return new VistaForm();
}
}
public class WinXpForm : IForm
{
public void ShowFormName()
{
Console.WriteLine("WinXP Form");
}
}
public class WinXpFormFactory : IAbstractFormFactory
{
public IForm MakeForm()
{
return new WinXpForm();
}
}
public static class Application
{
public static void Run(IAbstractFormFactory factory)
{
IForm form = factory.MakeForm();
form.ShowFormName();
}
}
public class Program
{
public static void Main()
{
IAbstractFormFactory factory;
int sys = 0;
if (sys == 0)
{
factory = new WinXpFormFactory();
}
else
{
factory = new VistaFormFactory();
}
Application.Run(factory);
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)