问题:一个工厂中生产Lenovo、Dell、IBM、Acer 牌子的电脑,如何根据用户的需求来实现生产用户想要的品牌?
用一个图片来表明
工厂中有四个品牌,我们需要屏蔽他们的差异
所以需要引用抽象类NoteBook
首先用伪代码声明几个类
public abstract class NoteBook //抽象父类,将父类继承给子类
{
public abstract void SayHello();
}
public class Lenovo : NoteBook
{
public override void SayHello()
{
Console.WriteLine("我是联想电脑");
}
}
public class Acer : NoteBook
{
public override void SayHello()
{
Console.WriteLine("我是宏基电脑");
}
}
public class Dell : NoteBook
{
public override void SayHello()
{
Console.WriteLine("我是戴尔电脑");
}
}
public class IBM : NoteBook
{
public override void SayHello()
{
Console.WriteLine("我是ibm笔记本");
}
}
声明了电脑的类后
如何实现用户的需求呢?
可以选择让用户输入自己想要的电脑品牌
Console.WriteLine("请输入你想要的笔记本品牌");
string s = Console.ReadLine();
用户输入了自己想要的电脑品牌,如何调用合适的类呢?
这里就是重点
可以选择声明一个函数,将参数代入,并将一个子类赋值给父类,这里我们已经将一个父类对象赋值为null,然后根据用户的需求返回合适的子类
定义的方法和主函数如下:
static void Main(string[] args)
{
Console.WriteLine("请输入你想要的笔记本品牌");
string s = Console.ReadLine();
NoteBook c= GetNoteBook(s);
c.SayHello();
}
/// <summary>
/// 简单工厂的核心 根据用户的输入创建对象赋值给父类
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static NoteBook GetNoteBook(string s )
{
NoteBook a = null;
if (s == "Lenovo")
{
a = new Lenovo();
}
else if (s == "IBM")
{
a = new IBM();
}
else if (s == "DELL")
{
a = new Dell();
}
else if (s == "Acer")
{
a = new Acer();
}
return a;
}
在这个简单工厂里,你可选择使用switch结构,也可以像我一样使用if—else结构
程序还是有一些问题,比如输入全小写也返回为null,不过大家可以使用ToUpper和Tolower来将用户输入的全部转换为大写或者小写,再进行比较。
楼主水平尚不够高,只想分享自己学习中的见解。
如果有什么不对的地方,欢迎大家一起探讨!