C# factory and abstract factory
Copy from https://dotnettutorials.net/lesson/abstract-factory-design-pattern-csharp/
“A factory is an object used for creating other objects. In technical terms, we can say that a factory is a class with a method. That method will create and return different objects based on the received input parameter“.
public interface IHuman { void Eat(); void Drink(); } public class HumanFactory { public static IHuman GetHuman(string humanType) { IHuman human = null; if(humanType=="North") { human = new NorthHuman(); } else if(humanType=="South") { human = new SouthHuman(); } return human; } } public class NorthHuman : IHuman { public void Drink() { Console.WriteLine("North drink!"); } public void Eat() { Console.WriteLine("North eat!"); } } public class SouthHuman : IHuman { public void Drink() { Console.WriteLine("South drink!"); } public void Eat() { Console.WriteLine("South drink!"); } } static void FactoryDemo() { IHuman human = HumanFactory.GetHuman("North"); human.Drink(); human.Eat(); }
The Abstract Factory Design Pattern provides a way to encapsulate a group of factories with a common theme without specifying their concrete classes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | public interface IBike { void GetDetails(); } public interface ICar { void GetDetails(); } public class RegularBike : IBike { public void GetDetails() { Console.WriteLine( "RegularBike GetDetails()" ); } } public class SportsBike : IBike { public void GetDetails() { Console.WriteLine( "SportsBike GetDetails()!" ); } } public class RegularCar : ICar { public void GetDetails() { Console.WriteLine( "RegularCar GetDetails!" ); } } public class SportsCar : ICar { public void GetDetails() { Console.WriteLine( "SportsCar GetDetails!" ); } } public interface IVehicleFactory { IBike CreateBike(); ICar CreateCar(); } public class RegularVehicleFatory : IVehicleFactory { public IBike CreateBike() { return new RegularBike(); } public ICar CreateCar() { return new RegularCar(); } } public class SportsVechicleFactory : IVehicleFactory { public IBike CreateBike() { return new SportsBike(); } public ICar CreateCar() { return new SportsCar(); } } static void AbstractFactoryDemo() { IVehicleFactory regularVehicleFactory = new RegularVehicleFatory(); IBike regularBike = regularVehicleFactory.CreateBike(); regularBike.GetDetails(); ICar regularCar=regularVehicleFactory.CreateCar(); regularCar.GetDetails(); IVehicleFactory sportsVehicleFactory = new SportsVechicleFactory(); IBike sportsBike=sportsVehicleFactory.CreateBike(); sportsBike.GetDetails(); ICar sportsCar=sportsVehicleFactory.CreateCar(); sportsCar.GetDetails(); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2021-03-05 Invoke microsoft own System.Text.Json.JsonSerialize() method to serialize object,without encoding
2021-03-05 Interface declare event and the concrete class implement the interface