zoukankan      html  css  js  c++  java
  • 工厂模式(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();
            }
        }
    

    效果:
    效果图

  • 相关阅读:
    【C#进阶系列】06 类型和成员基础
    纪中5日T1 1564. 旅游
    纪中17日T1 2321. 方程
    纪中17日T2 2322. capacitor
    纪中10日T1 2313. 动态仙人掌
    纪中14日听课小结 图论 最短路 二分图 差分约束
    一个抓猫的游戏 消遣GAME 持续更新中!
    洛谷P1464 Function  HDU P1579 Function Run Fun
    洛谷P1976 鸡蛋饼
    纪中12日T1 2307. 选择
  • 原文地址:https://www.cnblogs.com/Canaban/p/13023904.html
Copyright © 2011-2022 走看看