工厂模式——学雷锋做好事

简介: 工厂模式——学雷锋做好事

 工厂(Factory)模式定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到子类。


 工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行,想要加新功能,本来是改工厂类,现在是修改客户端。


 使用场景:单一系列产品创建。


 代码例子背景:大学生学习雷锋做好事,课余时间去孤寡老人家里扫地、洗衣服做家务,但是不需要让老人知道学做雷锋的是大学生还是社区志愿者,因为雷锋做好事不留名。


  雷锋类:包含具体要实现的功能

    class LeiFeng
    {   
        public void Sweep()
        {
            Console.WriteLine("扫地");
        }
        public void Wash()
        {
            Console.WriteLine("洗衣");
        }
        public void BuyRice()
        {
            Console.WriteLine("买米");
        }
    }

  简单工厂模式:使用逻辑判断选择实例化相应的类,添加新类要修改原码,违反开闭原则。

class SimpleFactory
    {
        public static LeiFeng CreateLeiFeng(string type)
        { 
        LeiFeng result = null;
            switch (type)
            {
                case "学雷锋的大学生":
                    result = new Undergraduate();
                    break;
                case "社区志愿者":
                    result = new Volunteer();
                    break;
            }
            return result;
        }
    }

  客户端:

    class Program
    {
        static void Main(string[] args)
        {
            LeiFeng studentA = SimpleFactory.CreateLeiFeng("学雷锋的大学生");
            studentA.BuyRice();
            LeiFeng studentB = SimpleFactory.CreateLeiFeng("学雷锋的大学生");
            studentB.Sweep();
            LeiFeng studentC = SimpleFactory.CreateLeiFeng("学雷锋的大学生");
            studentC.Wash();
        }
    }

  工厂模式

  • 定义一个接口
    interface IFactory
    {
        LeiFeng CreateLeiFeng();
    }
  • 实例化子类分别实现接口
 class Undergraduate:LeiFeng
    {}
 class Volunteer :LeiFeng
    {}
    //学雷锋的大学生工厂
    class UndergraduateFactory : IFactory
    {
        public LeiFeng CreateLeiFeng()
        {
            return new Undergraduate();
        }
    }
    //社区志愿者工厂
    class VolunteerFactory : IFactory
    {
        public LeiFeng CreateLeiFeng()
        {
            return new Volunteer();
        }
    }

 客户端:

   class Program
    {
        static void Main(string[] args)
        {
            IFactory factory = new UndergraduateFactory();
            LeiFeng student = factory.CreateLeiFeng();
            student.BuyRice();
            student.Sweep();
            student.Wash();
        }
    }
相关文章
|
4月前
|
设计模式 Java
实现一个工厂模式
实现一个工厂模式
52 0
|
4月前
|
设计模式 调度
重看工厂模式
重看工厂模式
31 0
|
4月前
工厂模式
工厂模式
45 0
|
4月前
|
设计模式
工厂模式与抽象工厂模式
​ 如有错误或有补充,以及任何的改进意见,请在评论区留下您的高见 工厂模式 工厂模式是一种创建型设计模式。在工厂模式中,类的实例化过程通常是通过一个专门的工厂类来完成的,而不是直接在客户端代码中进行的。这样可以提供更好的封装,使得客户端代码与具体产品的实现解耦,增加代码的灵活性和可维护性。 优点 封装性:客户端代码不再需要知道所创建对象的详细信息,只需要与工厂接口进行交互即可。 灵活性:工厂模式使得系统更加灵活,可以在不修改客户端代码的情况下更换或添加新产品。 可扩展性:通过使用工厂模式,当需要添加新产品时,只需要扩展工厂类,而不需要修改客户端代码。 基本结构 抽象产品(Abstra
44 0
|
4月前
|
设计模式 Java
详细讲解什么是工厂模式
详细讲解什么是工厂模式
|
4月前
|
设计模式 C++
【C++】—— 工厂模式详解
【C++】—— 工厂模式详解
|
前端开发
复杂工厂模式
复杂工厂模式
66 1
|
存储 设计模式 Java
多种工厂模式的运用
多种工厂模式的运用
43 0
【C++提高】 工厂模式
【C++提高】 工厂模式
55 0
简单的工厂模式和工厂方法模式
简单的工厂模式和工厂方法模式