示例
Dell和HP等厂商可以生产鼠标,创建鼠标工厂,通过传入不同的厂商生产对应的鼠标,并完成鼠标双击,缺点是会出现很多if else或switch case条件判断,不符合开闭原则
实现
public class SimpleFactory
{
internal Mouse GetMouse(string brand)
{
return MouseFactory.CreateMouse(brand);
}
}
class DellMouse : Mouse
{
internal DellMouse()
{
base.Brand = "DELL";
}
}
class HPMouse : Mouse
{
internal HPMouse()
{
base.Brand = "HP";
}
}
//鼠标工厂
class MouseFactory
{
public static Mouse CreateMouse(string brand)
{
if (brand == "DELL")
return new DellMouse();
//每次工厂需要生产新的品牌鼠标时,都需要加if/else
//if...
//else...
else
return new HPMouse();
}
}
//鼠标抽象类
abstract class Mouse
{
//每个鼠标都必须有自己的品牌
public string Brand { get; set; }
//每个鼠标都必须可以双击
internal void DoubleClick()
{
Console.WriteLine($"{Brand}品牌的鼠标正在双击...");
}
}
//简单工厂模式(通常与反射相结合,参数反射获得再传入GetMouse方法)
new SimpleFactory().GetMouse("DELL").DoubleClick();