首页 > 其他分享 >03_工厂方法模式

03_工厂方法模式

时间:2024-03-08 11:46:42浏览次数:23  
标签:03 IFruit int void 模式 工厂 Amount public

工厂方法模式是一种创建型设计模式,用于定义一个创建对象的接口,但将实际创建对象的工作延迟到子类中。这样可以使一个类的实例化延迟到其子类中,从而实现解耦和灵活性。

在工厂方法模式中,通常包含以下几个角色:

  1. 抽象工厂(Creator):定义创建对象的接口,通常包含一个抽象的工厂方法,由子类实现具体的对象创建逻辑。
  2. 具体工厂(ConcreteCreator):实现抽象工厂接口,负责创建具体的对象。
  3. 抽象产品(Product):定义工厂方法创建的对象的接口。
  4. 具体产品(ConcreteProduct):实现抽象产品接口,是具体工厂创建的对象。

 

Product

public interface IFruit
    {
        /// <summary>
        /// 水果的数量
        /// </summary>
        double Amount { get; }
        /// <summary>
        /// 种植
        /// </summary>
        /// <param name="amount"></param>
        void Plant(int amount);
        /// <summary>
        /// 生成
        /// </summary>
        /// <param name="days"></param>
        void Grow(int days);
        /// <summary>
        /// 收获
        /// </summary>
        /// <returns></returns>
        double Harvest();
    }

 

ConcreteProduct

苹果

public class Apple : IFruit
    {
        public double Amount { get; private set; }

        public void Grow(int days)
        {
            Amount *= days * 0.85;
        }

        public double Harvest()
        {
            return Amount;
        }

        public void Plant(int amount)
        {
            Amount = amount;
        }
    }
View Code

香蕉

 public class Banana : IFruit
    {
        public double Amount { get; private set; }

        public void Grow(int days)
        {
            Amount *= days * 2;
        }

        public double Harvest()
        {
            return Amount;
        }

        public void Plant(int amount)
        {
            Amount = amount;
        }
    }
View Code

橘子

public class Orange : IFruit
    {
        public double Amount { get; private set; }

        public void Grow(int days)
        {
            Amount *= days * 1.5;
        }

        public double Harvest()
        {
            return Amount;
        }

        public void Plant(int amount)
        {
            Amount = amount;
        }
    }
View Code

 

Creator

public interface IFruitFactory
    {
        IFruit Create();
    }

 

ConcreteCreator

苹果

 public class AppleFactory : IFruitFactory
    {
        public IFruit Create()
        {
            return new Apple();
        }
    }

香蕉

public class BananaFactory : IFruitFactory
    {
        public IFruit Create()
        {
            return new Banana();
        }
    }

橘子

 public class OrangeFactory : IFruitFactory
    {
        public IFruit Create()
        {
            return new Orange();
        }
    }

 

internal class Client
    {
        /*
    优点:

    (1)工厂方法模式就很好的减轻了工厂类的负担,把某一类/某一种"水果"交由一个工厂生产;(对应简单工厂的缺点1)

    (2)增加某一类"水果"并不需要修改工厂类,只需要添加生产这类"水果"的工厂即可,使得工厂类符合开放-封闭原则。

  缺点:

    (1)相比简单工厂,实现略复杂。

    (2)对于某些可以形成产品族的情况处理比较复杂。我们可以借用抽象工厂来实现。
    */

        public void Start()
        {
            DoStuff(new AppleFactory().Create());
            DoStuff(new BananaFactory().Create());
            DoStuff(new OrangeFactory().Create());
        }

        private void DoStuff(IFruit fruit)
        {
            fruit.Plant(10);
            fruit.Grow(180);
            Console.WriteLine($"{fruit.GetType().Name}收获:{fruit.Harvest()}");
        }
    }

 

调用

static void Main(string[] args)
        {
            new Client().Start();

            Console.ReadKey();
        }

 

标签:03,IFruit,int,void,模式,工厂,Amount,public
From: https://www.cnblogs.com/MingQiu/p/18060655

相关文章

  • 02_简单工厂模式
    简单工厂模式(SimpleFactoryPattern)是一种创建型设计模式,属于工厂模式的一种。在简单工厂模式中,通过一个工厂类来负责创建对象实例,而客户端无需直接创建对象,只需要通过工厂类来获取所需的对象。简单工厂模式包含以下几个角色:工厂类(Factory):负责创建对象实例的类。产品类(Produc......
  • 01_单例模式
    单例模式是一种常见的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。在单例模式中,类会提供一个静态方法来获取其唯一实例,如果该实例不存在则会创建一个新实例,否则返回已有的实例。publicsealedclassCounter{publicCounter(){......
  • 前端设计模式大全
    1.工厂模式工厂模式(FactoryPattern):将对象的创建和使用分离,由工厂类负责创建对象并返回。在前端开发中,可以使用工厂模式来动态创建组件。前端中的工厂模式是一种创建对象的设计模式,它可以让我们封装创建对象的细节,我们使用工厂方法而不是直接调用new关键字来创建对象,使得......
  • 理解Saga模式:分布式事务的优雅解决方案
    理解Saga模式:分布式事务的优雅解决方案在微服务架构中,系统通常被拆分成多个独立的服务,每个服务管理着自己的数据和逻辑。这种拆分带来了灵活性和可扩展性,但同时也引入了分布式事务管理的挑战。传统的事务管理方法,如数据库的ACID(原子性、一致性、隔离性、持久性)事务,不再适用于跨多......
  • 软件工程日报3 2024.0307
     第一天第二天第三天第四天第五天所花时间(包括上课)6小时5小时4小时  代码量(行)300350200  博客量(篇)111  所学知识了解安卓相关数据库的知识,下载安装了matlab学习了相关安卓的布局展示了解activity之间的相互跳转以学  ......
  • 2024/03/07
    今天学习计算机知识的时间大概有2个小时。代码主要以数据库MySQL的操作为主,大概有200多行。今天博客发表的篇数为一篇。今天学习的知识点主要是数据库的查询操作,包括单表的基本查询、条件查询、聚合函数、分组查询、排序查询和分页查询还有多表的设计和查询包括内连接、外连接......
  • 20240307打卡
    第二周第一天第二天第三天第四天第五天第六天第七天所花时间1h5h1h1.5h代码量(行)701166282博客量(篇)1111知识点了解学会详细地全局路由配置有关动态规划算法python基础知识使用json前后端传值存值关于解决前端传JSON对象,后......
  • 2023-03-07 leetcode写题记录
    2023-03-07leetcode写题记录目录2023-03-07leetcode写题记录148.排序链表题目链接题意解法归并排序56.合并区间题目链接题意解法复健中,第一次重新写链表题。写链表题需要注意下面这些事项:写链表时,可以把链表理解成一个数,只不过这个数有特殊含义,代表着一个地址;"->"是对地......
  • 2024.03.07
     第三天所花时间(包括上课)1h代码量(行)56行博客量(篇)1篇了解到的知识点AndroidStudio的数据库简单查询操作,复习昨天的增删改操作          今天进行了AndroidStudio对数据库的查询操作,进行了最基本的查询操作,以及在虚拟机上进行输出......
  • 观察者模式
    定义观察者模式(ObserverPattern):定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。观察者模式是一种对象行为型模式。观察者模式包含两个角色:主题(Subject):被观察的对象,它维护了一个观察者列表,可以添加、删除观察者,以及......