工厂模式(Factory Pattern)

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

效果:
效果图

posted @ 2020-06-01 10:46  Canaban  阅读(220)  评论(0编辑  收藏  举报