• 工厂模式(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();
            }
        }
    

    效果:
    效果图

  • 相关阅读:
    【18焦作网络赛 J】 大数开方
    最小圆覆盖
    高斯消元
    回文自动机 PAM
    后缀自动机 SAM
    后缀数组 SA
    左偏树(可并堆)
    动态树LCT(Link-Cut-Tree)
    职场自我推销10大金点子
    数据库笔记
  • 原文地址:https://www.cnblogs.com/Canaban/p/13023904.html
Copyright © 2020-2023  润新知