设计模式之简单工厂
2022/7/21 6:24:41
本文主要是介绍设计模式之简单工厂,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、简单工厂:为了客户类和服务类之间的解耦,把对象的创建任务交给第三方类,这个第三方类就充当工厂的作用,严格来说简单工厂不属于23种设计模式之一。
二、实现思路 :创建一个简单工厂类,根据客户端要求(参数)调用类方法创建对象后返回给调用对象。
三、代码举例:
抽象类Human:
namespace SimpleFactory { public abstract class Human { public abstract void Study(); public abstract void Eat(); public abstract void Sleep(); public abstract void Play(); } }
实现了human抽象类的对象AmeriCan:
namespace SimpleFactory { public class AmeriCan: Human { public override void Eat() { Console.WriteLine("美国人-吃东西"); } public override void Play() { Console.WriteLine("美国人-玩游戏"); } public override void Sleep() { Console.WriteLine("美国人-睡觉"); } public override void Study() { Console.WriteLine("美国人-学习"); } } }
实现了human抽象类的对象ChineseMan
namespace SimpleFactory { public class ChineseMan : Human { public override void Eat() { Console.WriteLine("中国人-吃东西"); } public override void Play() { Console.WriteLine("中国人-玩游戏"); } public override void Sleep() { Console.WriteLine("中国人-睡觉"); } public override void Study() { Console.WriteLine("中国人-学习"); } } }
实现了human抽象类的对象FrenchMan:
namespace SimpleFactory { public class FrenchMan : Human { public override void Eat() { Console.WriteLine("法国人-吃东西"); } public override void Play() { Console.WriteLine("法国人-玩游戏"); } public override void Sleep() { Console.WriteLine("法国人-睡觉"); } public override void Study() { Console.WriteLine("法国人-学习"); } } }
实现了human抽象类的对象Japanese:
namespace SimpleFactory { public class Japanese : Human { public override void Eat() { Console.WriteLine("日本人-吃东西"); } public override void Play() { Console.WriteLine("日本人-玩游戏"); } public override void Sleep() { Console.WriteLine("日本人-睡觉"); } public override void Study() { Console.WriteLine("日本人-学习"); } } }
定义枚举类如下,用于客户类传参数到工厂类
namespace SimpleFactory { public enum HumanType { ChineseMan=1, Japanese = 2, American = 3, FrenchMan = 4 } }
工厂类代码如下:
namespace SimpleFactory { public class Factory { public static Human CreateInstance(HumanType type) { Human resault = null; switch (type) { case HumanType.ChineseMan: resault = new ChineseMan(); break; case HumanType.American: resault = new AmeriCan(); break; case HumanType.FrenchMan: resault = new FrenchMan(); break; default: resault = new Japanese(); break; } return resault; } } }
客户端调用代码如下:
{ //简单工厂,将创建对象的任务交给工厂类,将此类依赖的细节转移到工厂类中 Human man0 = Factory.CreateInstance(HumanType.American); man0.Eat(); Human man1 = Factory.CreateInstance(HumanType.Japanese); man1.Sleep(); Human man2 = Factory.CreateInstance(HumanType.ChineseMan); man2.Study(); Human man3 = Factory.CreateInstance(HumanType.FrenchMan); man3.Play(); Console.ReadKey(); }
运行结果:
四、简单工厂的优缺点及使用:简单工厂转移了客户类与服务类的依赖关系,但是同时自身依赖细节较多,且违背了单一职责原则,在扩展功能时需要修改工厂类,又违背了开闭原则,在考虑使用简单工厂时,应根据程序的扩展性来决定是否采用该方法。
这篇关于设计模式之简单工厂的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-20测试人员都是画画大神,让我看看谁还不会用代码图?
- 2024-05-20年薪百万的程序员都在用的摸鱼方式……
- 2024-05-19永别了,微服务架构!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了