gpt4 book ai didi

design-patterns - 设计模式——抽象工厂模式和开闭原则

转载 作者:行者123 更新时间:2023-12-01 10:15:35 25 4
gpt4 key购买 nike

我是设计模式的初学者。

我正在尝试使用抽象工厂模式,同时保持开闭原则。

请看下面的代码:

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();
}
}

它可以是抽象工厂模式的一个例子吗?

如果是,我如何结合开闭原则的概念对其进行重构?

最佳答案

您给出的示例不是抽象工厂。抽象工厂有工厂方法(即创建和返回对象的方法)。

至于开放/封闭原则,抽象工厂模式固有地促进了这一点。代码是“封闭的”,因为如果您添加新工厂(因为您正在使用依赖注入(inject))就不必修改它,并且它是“开放的”,因为您可以通过编写新的抽象工厂来扩展功能.

更新:这是修改后的问题中的示例代码以显示抽象工厂:

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();
}
}

关于design-patterns - 设计模式——抽象工厂模式和开闭原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1108248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com