首页 > 编程语言 >【C#设计模式(3)——抽象工厂模式(Abstract Factory Pattern)】

【C#设计模式(3)——抽象工厂模式(Abstract Factory Pattern)】

时间:2024-11-12 09:19:02浏览次数:3  
标签:设计模式 IFruitCan Name C# Pattern IVegetableCan CreateCan public string

前言

抽象工厂模式(Abstract Factory Pattern)

运行结果

在这里插入图片描述

代码

//水果罐头接口
public interface IFruitCan
{
    void CreateCan();
}
//苹果罐头类
public class AppleCan : IFruitCan
{
    string Name { get; set; } = "苹果罐头";
    public void CreateCan()
    {
        Console.WriteLine($"生产了{Name}");
    }
}
//荔枝罐头类
public class LitchiCan : IFruitCan
{
    string Name { get; set; } = "黄桃罐头";
    public void CreateCan()
    {
        Console.WriteLine($"生产了{Name}");
    }
}
//蔬菜罐头接口
public interface IVegetableCan
{
    void CreateCan();
}
//菠菜罐头
public class SpinachCan : IVegetableCan
{
    string Name { get; set; } = "菠菜罐头";
    public void CreateCan()
    {
        Console.WriteLine($"生产了{Name}");
    }
}
//大豆罐头
public class SoybeanCan : IVegetableCan
{
    string Name { get; set; } = "黄豆罐头";
    public void CreateCan()
    {
        Console.WriteLine($"生产了{Name}");
    }
}
//抽象工厂
public interface ICanFactory
{
    IFruitCan CreateFruitCan();
    IVegetableCan CreateVegetableCan();
}
// 具体工厂1
public class GuangZhouCanFactory : ICanFactory
{
    public string Name { get; set; } = "广州罐头厂";
    public GuangZhouCanFactory(string name)
    {
        Name = name;
        Console.WriteLine($"{Name}正在生产......");
    }
    public IFruitCan CreateFruitCan()
    {
        return new AppleCan();
    }

    public IVegetableCan CreateVegetableCan()
    {
        return new SpinachCan();
    }
}
// 具体工厂2
public class ShangHaiCanFactory : ICanFactory
{
    public string Name { get; set; } = "上海罐头厂";
    public ShangHaiCanFactory(string name)
    {
        Name = name;
        Console.WriteLine($"{Name}正在生产......");
    }
    public IFruitCan CreateFruitCan()
    {
        return  new LitchiCan();
    }

    public IVegetableCan CreateVegetableCan()
    {
        return new SoybeanCan();
    }
}

/*
 * 抽象工厂模式:Abstract Factory Pattern
 */
internal class Program
{
    static void Main(string[] args)
    {
        //创建工厂实例
        ICanFactory factoryA = new GuangZhouCanFactory("广州罐头厂");
        //罐头实例
        IFruitCan fruitCanA = factoryA.CreateFruitCan();
        IVegetableCan vegetableCanA = factoryA.CreateVegetableCan();
        //方法
        fruitCanA.CreateCan();
        vegetableCanA.CreateCan();

        ICanFactory factoryB = new ShangHaiCanFactory("上海罐头厂");
        IFruitCan fruitCanB = factoryB.CreateFruitCan();
        IVegetableCan vegetableCanB = factoryB.CreateVegetableCan();
        fruitCanB.CreateCan();
        vegetableCanB.CreateCan();

        Console.ReadLine();
    }
}

标签:设计模式,IFruitCan,Name,C#,Pattern,IVegetableCan,CreateCan,public,string
From: https://blog.csdn.net/weixin_43626218/article/details/143690059

相关文章

  • CF 1325 题解
    CF1325题解AEhAbAnDgCd有\(\gcd(1,x)=1,\text{lcm}(1,x)=x\),因此输出\(1x\).BCopyCopyCopyCopyCopy要求严格上升子序列,那么答案的上界当然是去重后的元素个数.能否取到上界呢?当然可以,每一段内选一个你想要的就可以了.CEhabandPath-eticMEXs发现\(0,......
  • Bootstrap vs TailwindCSS
    在为您的网页设计项目选择Bootstrap和TailwindCSS之间犹豫不决?以下是帮助您做出决定的快速概述:Bootstrap提供了即用型组件,便于快速开发,但定制性有限。TailwindCSS提供了实用类,设计高度可定制,但需要更多的前期工作。性能:TailwindCSS通过删除未使用的样式,可能使您的网......
  • 【C++】模板(一):函数模板
    大家好,我是苏貝,本篇博客带大家了解C++的函数模板,如果你觉得我写的还不错的话,可以给我一个赞......
  • Logback 初篇
    知识体系        Logback的知识体系分为四部分。        第一部分,基础,模块,搭建环境,流程,配置文件各个配置项的含义。        第二部分,核心对象,logger,appender,encoder与Layout,filter。        第三部分,杂项,性能,MDC等。        第......
  • 模态内重叠优化,简单有效的CLIP微调方法 | BMVC'24 Oral
    来源:晓飞的算法工程笔记公众号,转载请注明出处论文:CLIPAdaptationbyIntra-modalOverlapReduction论文地址:https://arxiv.org/abs/2409.11338创新点提出一种基于轻量级适配的新方法,直接在图像空间中减少CLIP中的模态内重叠(IMO)。新特征与任何利用缓存模型的无训练......
  • IDEA -- 新建的文件没办法import class
    背景: 代码要添加新模块,复制了别的模块代码来做demo改成自己名字的时候发现,明明创建好的类却没办法improtclass,一直报错,手动添加类的路径也报错,并且伴随着类似 Cannotaccesscom.xxx 的报错原因:  可能是再复制别的类的代码的时候,频繁修改别的类名成自己需......
  • .NET 公共语言运行时(Common Language Runtime,CLR)
    .NET的公共语言运行时(CommonLanguageRuntime,CLR)是.NETFramework和.NETCore的核心组件,负责运行和管理.NET程序。CLR提供了一个高效、安全和稳定的执行环境,支持多种编程语言并处理各种系统级的任务。下面是对.NETCLR的详细介绍,包括其功能、架构、以及如何与.NET应......
  • AutoCAD Blockview .net在wpf项目中的问题
    之前使用Blockview是遇到平移的问题,这几天在学习使用CommunityToolkit.MVVM框架来创建用户界面,当创建GsPreviewCtrl控件时会遇到错误,导致整个窗体不能显示,错误信息如下:**************异常文本**************System.InvalidProgramException:公共语言运行时检测到无效的......
  • py-filelock python 平台无关的文件锁
    py-filelock是一个平台无关的文件锁实现,可以用来实现一些基于文件锁的业务控制参考使用lock.pyimportosfromfilelockimportTimeout,FileLockfile_path="high_ground.txt"lock_path="high_ground.txt.lock"lock=FileLock(lock_path,timeout=1)withlock:......
  • 内核tracepoint的注册回调及添加的方法
    一、背景内核开发时往往需要做一些内核态函数的监测或者内核状态的监测,就需要用一些调试手段来观测。常用的内核态的观测如kprobe和tracepoint,但是kprobe往往受制于一些系统的限制,很多系统并没有打开kprobe选项,这样我们不能通过kprobe来探测。但是tracepoint一般都是打开的,毕......