CSharp: Abstract Factory in donet core 3

csharp;gutter:true; /// /// Abstract Factory抽像工厂 /// geovindu,Geovin Du eidt /// public interface IShape { void Draw(); } /// /// /// public class Square : IShape { public void Draw() => Console.WriteLine("Basic square"); } /// /// /// public class Rectangle : IShape { public void Draw() => Console.WriteLine("Basic rectangle"); } /// /// /// public class RoundedSquare : IShape { public void Draw() => Console.WriteLine("Rounded square"); } /// /// /// public class RoundedRectangle : IShape { public void Draw() => Console.WriteLine("Rounded rectangle"); } /// /// /// public enum Shape { Square, Rectangle } /// /// /// public abstract class ShapeFactory { public abstract IShape Create(Shape shape); } /// /// /// public class BasicShapeFactory : ShapeFactory { public override IShape Create(Shape shape) { switch (shape) { case Shape.Square: return new Square(); case Shape.Rectangle: return new Rectangle(); default: throw new ArgumentOutOfRangeException( nameof(shape), shape, null); } } } /// /// /// public class RoundedShapeFactory : ShapeFactory { public override IShape Create(Shape shape) { switch (shape) { case Shape.Square: return new RoundedSquare(); case Shape.Rectangle: return new RoundedRectangle(); default: throw new ArgumentOutOfRangeException(nameof(shape), shape, null); } } } /// /// /// public class Demo { public static ShapeFactory GetFactory(bool rounded) { if (rounded) return new RoundedShapeFactory(); else return new BasicShapeFactory(); }</p> <pre><code>} </code></pre> <pre><code> ;gutter:true;
///
/// Abstract Factory抽像工厂
/// geovindu,Geovin Du eidt
///
public interface IAnimalFactory
{
IDog GetDog();
ITiger GetTiger();
}

///
/// Abstract Product-1
///
public interface ITiger
{
void AboutMe();
}
///
/// Abstract Product-2
///
public interface IDog
{
void AboutMe();
}

///
/// Concrete product-A1(WildTiger)
///
class WildTiger : ITiger
{
public void AboutMe()
{
Console.WriteLine("涂氏 tiger says: I prefer hunting in jungles.Halum.");
}
}
///
/// Concrete product-B1(WildDog)
///
class WildDog : IDog
{
public void AboutMe()
{
Console.WriteLine("涂氏 dog says: I prefer to roam freely in jungles.Bow-Wow.");
}
}

///
/// Concrete product-A2(PetTiger)
///
class PetTiger : ITiger
{

///
///
///
public void AboutMe()
{
Console.WriteLine("李氏 tiger says: Halum.I play in an animal circus.");
}
}

///
/// Concrete product-B2(PetDog)
///
class PetDog : IDog
{
public void AboutMe()
{
Console.WriteLine("李氏 dog says: Bow-Wow.I prefer to stay at home.");
}
}
///
/// Concrete Factory 1-Wild Animal Factory
///
public class WildAnimalFactory : IAnimalFactory
{

public ITiger GetTiger()
{
return new WildTiger();
}
public IDog GetDog()
{
return new WildDog();
}
}
///
/// Concrete Factory 2-Pet Animal Factory
///
public class PetAnimalFactory : IAnimalFactory
{
public IDog GetDog()
{
return new PetDog();
}

public ITiger GetTiger()
{
return new PetTiger();
}
}
///
/// Factory provider
///
class FactoryProvider
{
///
///
///
///
///
///
public static IAnimalFactory GetAnimalFactory(string factoryType)
{
if (factoryType.Contains("涂氏"))
{
// Returning a WildAnimalFactory
return new WildAnimalFactory();
}
else
if (factoryType.Contains("李氏"))
{
// Returning a PetAnimalFactory
return new PetAnimalFactory();
}
else
{
throw new ArgumentException("You need to pass either wild or pet as argument.");
}
}
}

调用:

csharp;gutter:true; //Abstract Factory抽像工厂 Console.WriteLine("<strong><em>Abstract Factory Pattern Demo.</em></strong>\n");</p> <pre><code> //Making a wild dog and wild tiger through WildAnimalFactory IAnimalFactory animalFactory = FactoryProvider.GetAnimalFactory("涂氏"); IDog dog = animalFactory.GetDog(); ITiger tiger = animalFactory.GetTiger(); dog.AboutMe(); tiger.AboutMe(); Console.WriteLine("******************"); //Making a pet dog and pet tiger through PetAnimalFactory now. animalFactory = FactoryProvider.GetAnimalFactory("李氏"); dog = animalFactory.GetDog(); tiger = animalFactory.GetTiger(); dog.AboutMe(); tiger.AboutMe(); // var basic = Demo.GetFactory(false); var basicRectangle = basic.Create(Shape.Rectangle); basicRectangle.Draw(); var roundedSquare = Demo.GetFactory(true).Create(Shape.Square); roundedSquare.Draw(); Console.ReadLine(); </code></pre> <pre><code> 输出: ;gutter:true;
***Abstract Factory Pattern Demo.***

涂氏 dog says: I prefer to roam freely in jungles.Bow-Wow.

涂氏 tiger says: I prefer hunting in jungles.Halum.

******************
李氏 dog says: Bow-Wow.I prefer to stay at home.

李氏 tiger says: Halum.I play in an animal circus.

Basic rectangle
Rounded square
***Abstract Factory Pattern Demo.***

CSharp: Abstract Factory in donet core 3

Original: https://www.cnblogs.com/geovindu/p/16754088.html
Author: ®Geovin Du Dream Park™
Title: CSharp: Abstract Factory in donet core 3

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/619997/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • markdown mermaid状态图

    状态图 状态图是一种用于计算机科学和相关领域描述系统行为的图。状态图要求描述的系统由有限数量的状态组成。 语法: stateDiagram-v2 [*] –> Still …

    Java 2023年6月5日
    064
  • M1上安装OpenJDK8

    brew上还没有M1的JDK8,所以只能通过手动下载第三方的OpenJDK的方式,参考如下链接: https://dev.to/shane/configure-m1-mac-to-…

    Java 2023年5月30日
    069
  • Vue

    Vue 学习目标 前端知识体系 HTML(页面的结构)、CSS(表现层)、JavaScript(行为) HTML 就不说了。 CSS CSS层叠样式是一门标记语言,并不是编程语言,…

    Java 2023年6月5日
    085
  • 9.Hystrix快速失败、降级及熔断机制

    降级介绍 降级是一种”无奈”的选择,就是俗称的备胎 Command降级需要fallback方法 ObservableCommand降级实现resumeWit…

    Java 2023年6月8日
    077
  • 联盟链 Hyperledger Fabric 应用场景

    一、说明 本文主要通过一个例子分享以 Hyperledger Fabric 为代表的联盟链应用场景。 关于 Fabric 的相关概念请先参考文章 《Hyperledger Fabr…

    Java 2023年6月6日
    081
  • git操作合集与知识点

    git合作开发须知 我们在自己的私人分支开发好各自的模块后,就要合并到master,这个时候在idea里边先切换到master, 然后update一下获取最新更新,解决一下冲突,最…

    Java 2023年6月5日
    071
  • @Aspect一直无法自动使用的原因

    使用注解实现AOP的时候遇见了一个问题 org.aspectj aspectjweaver 1.9.6 runtime 从网上拉下来的aspectj依赖没注意带了一个 <sc…

    Java 2023年6月15日
    071
  • Java线上代码热修复的一些积累

    工具:Arthas 参考文章: https://blog.csdn.net/Admire_an/article/details/99768393 https://www.cnkir…

    Java 2023年6月16日
    085
  • devops实践: teamcity实现持续集成

    解决了什么问题? 快速ci cd ; 团队协作效率更高,更快的集成,更快的交付;走gitops模式; 主流的CICD过程: teamcity的架构: 安装方式 docker的方式安…

    Java 2023年6月8日
    085
  • 02、Java的lambda表达式和JavaScript的箭头函数

    前言 在JDK8和ES6的语言发展中,在Java的lambda表达式和JavaScript的箭头函数这两者有着千丝万缕的联系;本次试图通过这篇文章弄懂上面的两个”语法糖…

    Java 2023年6月13日
    096
  • Java基础语法(真随笔,不完整)

    一、注释 (1)单行注释 // (2)多行注释 / / (3)文档注释 JavaDoc /* /(用来生成自己的API文档) 二、标识符 (1)都以A-Z、a-z、$、_ 开头 (…

    Java 2023年6月6日
    081
  • Java8⾼效遍历map_Java8中Map的遍历⽅式总结

    java;gutter:true; public class LambdaMap { private Map map = new HashMap<>(); @Befor…

    Java 2023年5月29日
    058
  • Java的lamda表达式/函数式接口/流式计算

    在我们看他人code的时候经常会看到,可能会经常看到lambda表达式,函数式接口,以及流式计算。在刚接触这些新功能时,也觉得真的有必要吗?但是现在写多了,发现这个功能确实能简化代…

    Java 2023年6月7日
    071
  • springboot 踩雷 invalid bound statement (not found): com.atguigu.springboot.mapper.employeemapper.getempbyid

    排了两个小时的雷:配置文件的路径时正确的、调用方法名对应到xml文件的id也是正确的,头快秃的时候发现,为了配置又新建了application.yml文件,所有的配置操作都是在ap…

    Java 2023年5月30日
    055
  • 会话跟踪技术

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月5日
    084
  • Docker简介及安装

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化…

    Java 2023年6月8日
    063
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球