Factory Pattern 创造型设计模式,提供一个创造对象的方式,在工厂模式中,创造对象的逻辑不对外暴露创建,只提供一个创建的接口。
定义一个创建对象的接口,其子类决定去创建哪一个实例对象,创建过程在之类中进行。
工厂模式
优点:调用者使用甚至需要知道创建对象的名字就可以,扩展性强,如果想增加,只需要增加一个工厂类就可以了,屏蔽产品的具体实现,只提供接口。
缺点:每增加一个工厂类,都需要增加一个工厂类和对象实现工厂,使系统类成倍增加,在一定程度上增加了系统的复杂度,也增加了系统具体类的依赖。
使用场景:复杂对象使用工厂模式,而简单对象则直接new 对象,如果简单对象使用工厂模式,就需要引入一个工厂类,增加系统复杂度
实例应用:1、超市打折活动,可能会有满减、8折、9折等等活动,这个时候就可以使用工厂模式。
2、创建不同品牌的手机,每台手机都有打电话,发信息等功能
代码:
1、先创建一个手机的接口:
public interface Phone
{
string GetPhoneMessage();
}
2、创建继承手机接口-华为手机、小米手机等
public class Huawei : Phone
{
public string GetPhoneMessage()
{
return "Vender Name:Huawei";
}
}
public class MI : Phone
{
public string GetPhoneMessage()
{
return "Vender Name:Xiao Mi";
}
}
3、创建工厂类:根据条件创建对应的对象,条件可以自己设定
public class PhoneFactory
{
public static Phone GetPhone(Enum type)
{
Phone phone = null;
switch (type)
{
case Vender.Huawei:
phone = new Huawei();
break;
case Vender.Mi:
phone = new MI();
break;
default:
break;
}
return phone;
}
}
public enum Vender
{
Mi = 1,
Huawei = 2
}
4、调用
class Program
{
static void Main(string[] args)
{
Console.WriteLine("======工厂模式======");
Phone phone = PhoneFactory.GetPhone(Vender.Huawei);
Console.WriteLine(phone.GetPhoneMessage());
phone = PhoneFactory.GetPhone(Vender.Mi);
Console.WriteLine(phone.GetPhoneMessage());
Console.ReadLine();
}
}
效果: