当前位置: 首页 > article >正文

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

前言

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

http://www.kler.cn/a/389923.html

相关文章:

  • 信号量和线程池
  • Docker入门系列——Docker-Compose
  • MicroPythonBLEHID使用说明——蓝牙鼠标
  • LabVIEW编程基础教学(一)--介绍
  • Axure是什么软件?全方位解读助力设计入门
  • Visa指令简介
  • 弱口令整改方案:借助双因子认证加强账号密码安全
  • CKA认证 | Day1 k8s核心概念与集群搭建
  • 【layui】echart的简单使用
  • web前端三大组成部分
  • 【架构设计常见技术】
  • GESP4级考试语法知识(贪心算法(一))
  • 人工智能、机器学习与深度学习:层层递进的技术解读
  • arkUI:遍历数据数组动态渲染(forEach)
  • VMware Workstation 和Fusion对所有用户免费
  • Toeplitz矩阵循环矩阵
  • uni-app view循环绑定click和 v-if
  • 福昕阅读器高级版解决文件上传IEEE PDF eXpress字体未嵌入
  • 深入探索Waymo自动驾驶技术发展:从DARPA挑战赛到第五代系统的突破
  • 【区别】ONLYOFFICE心得体会,8.2与8.1区别
  • 20241107给野火LubanCat1-BTB刷Ubuntu的预编译固件并点亮USB接口的热像仪AT600
  • 从0开始学习Linux——系统服务管理
  • 在 WPF 中,如何实现数据的双向绑定?
  • (蓝桥杯C/C++)——动态规划(DP)
  • 鸿蒙华为商城APP案例
  • esayExcel根据模板导出包含图片