抽象工厂模式-C#实现

该实例基于WPF实现,直接上代码,下面为三层架构的代码。

一 Model

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 设计模式练习.Model.抽象工厂模式
{public abstract class AbstructFactory{public abstract Comptuter GetComptuter(string name);public abstract Phone GetPhone(string name);}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 设计模式练习.Model.抽象工厂模式
{internal class AppleComptuter : Comptuter{public override string Name(){return "苹果电脑";}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 设计模式练习.Model.抽象工厂模式
{internal class ApplePhone : Phone{public override string Name(){return "苹果手机";}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 设计模式练习.Model.抽象工厂模式
{public abstract class Comptuter{public abstract string Name();}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 设计模式练习.Model.抽象工厂模式
{internal class ComptuterFactory : AbstructFactory{public override Comptuter GetComptuter(string name){Comptuter comptuter = null;switch (name){case "Apple":comptuter = new AppleComptuter();break;case "Dell":comptuter = new DellComptuter();break;case "Lesson":comptuter = new LessonComptuter();break;}return comptuter;}public override Phone GetPhone(string name){Phone phone = null;switch (name){case "Apple":phone = new ApplePhone();break;case "ReMi":phone = new ReMiPhone();break;case "HauWei":phone = new HauWeiPhone();break;}return phone;}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 设计模式练习.Model.抽象工厂模式
{internal class DellComptuter : Comptuter{public override string Name(){return "戴尔电脑";}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 设计模式练习.Model.抽象工厂模式
{internal class HauWeiPhone : Phone{public override string Name(){return "华为手机";}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 设计模式练习.Model.抽象工厂模式
{internal class LessonComptuter : Comptuter{public override string Name(){return "联想电脑";}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 设计模式练习.Model.抽象工厂模式
{public abstract class Phone{public abstract string Name();}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 设计模式练习.Model.抽象工厂模式
{internal class PhoneFactory : AbstructFactory{public override Comptuter GetComptuter(string name){Comptuter comptuter = null;switch (name){case "Apple":comptuter = new AppleComptuter();break;case "Dell":comptuter = new DellComptuter();break;case "Lesson":comptuter = new LessonComptuter();break;}return comptuter;}public override Phone GetPhone(string name){Phone phone = null;switch (name){case "Apple":phone = new ApplePhone();break;case "ReMi":phone = new ReMiPhone();break;case "HauWei":phone = new HauWeiPhone();break;}return phone;}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 设计模式练习.Model.抽象工厂模式
{internal class ReMiPhone : Phone{public override string Name(){return "小米手机";}}
}

二 View

<Window x:Class="设计模式练习.View.抽象工厂模式.AbstructFactory"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:设计模式练习.View.抽象工厂模式"mc:Ignorable="d"Title="AbstructFactory" Height="450" Width="800"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="8*"/><ColumnDefinition Width="2*"/></Grid.ColumnDefinitions><StackPanel Grid.Column="0"><TextBlock Text="{Binding Ph1}"/><TextBlock Text="{Binding Ph2}"/><TextBlock Text="{Binding Ph3}"/><TextBlock Text="{Binding Cp1}"/><TextBlock Text="{Binding Cp2}"/><TextBlock Text="{Binding Cp3}"/></StackPanel><Button Content="生产随机对象" Grid.Column="1" Command="{Binding fctCommand}"/></Grid>
</Window>

三 ViewModel

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 设计模式练习.Model.抽象工厂模式;namespace 设计模式练习.ViewModel.抽象工厂模式
{partial class AbstructFactory_ViewModel : ObservableObject{[ObservableProperty]private string ph1;[ObservableProperty]private string ph2;[ObservableProperty]private string ph3;[ObservableProperty]private string cp1;[ObservableProperty]private string cp2;[ObservableProperty]private string cp3;[RelayCommand]private void fct(){AbstructFactory a = new ComptuterFactory();AbstructFactory b = new PhoneFactory();Cp1 = a.GetComptuter("Dell").Name();Cp2 = a.GetComptuter("Apple").Name();Cp3 = a.GetComptuter("Lesson").Name();Ph1 = b.GetPhone("Apple").Name();Ph2 = b.GetPhone("ReMi").Name();Ph3 = b.GetPhone("HauWei").Name();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/647684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[GXYCTF2019]BabyUpload1

尝试各种文件&#xff0c;黑名单过滤后缀ph&#xff0c;content-type限制image/jpeg 内容过滤<?&#xff0c;木马改用<script languagephp>eval($_POST[cmdjs]);</script> 上传.htaccess将上传的文件当作php解析 蚁剑连接得到flag

OPENMV驱动云台实现颜色追踪

前言 本篇文章旨在记录我电赛期间学习OPENMV对颜色识别&#xff0c;以及通过串口通信的方式将坐标数据传给单片机&#xff0c;从而驱动舵机云台进行颜色追踪。 一、OPENMV色块识别追踪代码 # Single Color RGB565 Blob Tracking Example # # This example shows off single co…

C++学习| QT快速入门

QT简单入门 QT Creater创建QT项目选择项目类型——不同项目类型的区别输入项目名字和路径选择合适的构建系统——不同构建系统的却别选择合适的类——QT基本类之间的关系Translation File选择构建套件——MinGW和MSVC的区别 简单案例&#xff1a;加法器设计界面——构建加法器界…

java web 研究生信息管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web研究生信息管理系统是一套完善的java web信息管理系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境 为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为My…

hdu1195 Open the lock 双向广度优先搜索

D-BFS 双向广度优先搜索 从起点和终点同时开始搜索&#xff0c;直到两个搜索的点相交&#xff0c;得到最短路径 Code: // D-BFS //by:MuQY #include <iostream> #include <algorithm> #include <string.h> #include <queue> #include <string> …

【Vue2 + ElementUI】分页el-pagination 封装成公用组件

效果图 实现 &#xff08;1&#xff09;公共组件 <template><nav class"pagination-nav"><el-pagination class"page-area" size-change"handleSizeChange" current-change"handleCurrentChange":current-page"c…

TarGAN:多模态医学图像转换GAN

TarGAN 核心思想网络结构 核心思想 论文&#xff1a;https://arxiv.org/abs/2105.08993 代码&#xff1a;https://github.com/2165998/TarGAN 解决的问题&#xff1a;传统多模态医学图像转换通常&#xff0c;在生成高质量图像方面存在问题&#xff0c;特别是在关键目标区域或…

NC65中间件能启动,前端客户端启动失败,加载异常,卡住(org.owasp.esapi)

控制台输出错误 ESAPI.properties could not be loaded by any means. Fail.SecurityConfiguration class(org.owasp.esapi.reference.DefaultSecurityConfiguration) CTOR threw exception.效果图&#xff1a; 解决方案 添加如下参数&#xff1a; -Dorg.owasp.esapi.resou…

信创UOS

信创UOS 国产操作系统 文章目录 信创UOS前言一、信创UOS是什么二、信创UOS的特点与局限性1. 信创UOS的特点2. 信创UOS的局限性三、信创UOS常见故障总结前言 信创UOS(Union Operating System)是由中国软件与技术服务股份有限公司(CS&S)开发的一款操作系统。它是中国政府…

用k8s私有化部署docsify做开放API平台

文章目录 1、API开放平台2、实现思路3、用docsify实现4、一些坑坑1&#xff1a;nginx转发实现跳转坑2&#xff1a;点击跳转不能精准跳坑3&#xff1a;md文档页内跳转与跨文档跳转坑4&#xff1a;插件做目录的折叠收起坑5&#xff1a;统一目录 做完了一个API开放平台的需求&…

Higress 开源一周年:新版本,新标准,新工具,新征程

作者&#xff1a;Higress 团队 历程回顾 Higress 开源一年时间&#xff0c;一共发布了 18 个 release 版本&#xff0c;收获了 40 多位社区贡献者和 1800 star&#xff0c;上图是这一年过来达成的一些关键的里程碑。 前面半年通过集成开源生态&#xff0c;打磨开源版本稳定性…

文件操作---C++

文件操作目录 1.文本文件1.1写文件1.2读文件1.2.1第一种方式&#xff1a;流输入方式1.2.2第二种方式&#xff1a;getline成员函数1.2.3第三种方式&#xff1a;getline全局函数1.2.4第四种方式&#xff1a;按一个一个字符读取 2.二进制文件2.1写文件2.2读文件 程序运行时产生的数…

LabVIEW电缆检修系统

在电力系统中&#xff0c;合理选择电缆检修策略是保障电网稳定运行的关键。现有的电缆检修策略往往忽视了电缆的技术和经济双重指标&#xff0c;导致检修效率低下和维护成本高昂。为此&#xff0c;开发了一种基于风险评估模型和全寿命周期成本&#xff08;LCC&#xff09;的电缆…

【论文笔记】Learning Deconvolution Network for Semantic Segmentation

重要说明&#xff1a;严格来说&#xff0c;论文所指的反卷积并不是真正的 deconvolution network 。 关于 deconvolution network 的详细介绍&#xff0c;请参考另一篇博客&#xff1a;什么是Deconvolutional Network&#xff1f; 一、参考资料 Learning Deconvolution Netwo…

在IDEA中创建SpringBoot项目

概述 SpringBoot是由Pivotal团队提供的全新的框架&#xff0c;其设计的目的是用来简化Spring应用的初始搭建以及开发过程。 传统方式构建Spring应用程序 导入依赖繁琐 依赖冲突 项目配置繁琐 SpringBoot特性 1、起步依赖 本质上就行一个Maven坐标&#xff0c;整合了完成一…

【C++进阶】STL容器--list使用迭代器问题分析

目录 前言 1. list的基本使用 1.1 list构造函数 1.2 list迭代器 1.3 list capacity 1.4 list元素访问 1.5 list 修改操作 insert erase swap resize clear 2. list失效迭代器问题 3. list使用算法库函数问题 总结 前言 list&#xff08;链表&#xff09;在C中非常重要…

【创建vue项目的两种方式】

Vue环境搭建 NodeJs安装包安装淘宝镜像 环境搭建webpack安装全局安装vue/cli查看模板创建项目1.webpack2. vue-cli NodeJs安装包 下载链接&#xff1a;官网链接 下载下来后&#xff0c;直接傻瓜式的安装即可。 通过在cmd控制台输入以下命令查看是否安装成功 node -v因为适配某…

RK3399平台开发系列讲解(PCIE篇)PCIE体系结构有哪些知识

🚀返回专栏总目录 沉淀、分享、成长,让自己和他人都能有所收获!😄 一、PCI/PCIe拓扑结构 PCI Express (PCIe) 拓扑结构是指 PCI Express 总线中各个设备之间的连接和通信方式。PCI Express 是一种高速串行总线标准,用于连接计算机内部的各种硬件设备,如图形卡、网络适配…

vue3---inputRef.value.focus()报错Cannot read properties of null (reading ‘focus‘)

问题描述&#xff1a;点击编辑按钮&#xff0c;出现el-input框&#xff08;el-input显示隐藏通过v-if控制&#xff09; <el-input ref"inputRef" v-if"isEdit" v-model"modelName" blur"isEdit false" /> <el-button text …

python小项目:口令保管箱

代码&#xff1a; #! python3 # python 编程-----口令保管箱passwords{emails: F7minlBDDuvMJuxESSKHFhTxFtjVB6,blog:VmALvQyKAxiVH5G8v01if1MLZF3sdt,luggage:12345,} import sys,pyperclip if len(sys.argv)<2:print(usage:python python3文件[accout]-copy accout pass…