经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
设计模式-抽象工厂
来源:cnblogs  作者:冰乐  时间:2019/9/20 9:49:38  对本文有异议

抽象工厂:创建对象,创建一组密不可分的对象

创建产品簇,多个对象是个整体,不可分割

工厂+约束

倾斜的可扩展性设计,增加产品很麻烦

  1. /// <summary>
  2. /// 一个工厂负责一些产品的创建
  3. /// 产品簇
  4. /// 单一职责就是创建完整的产品簇
  5. ///
  6. /// 继承抽象类后,必须显式的override父类的抽象方法
  7. /// </summary>
  8. public abstract class FactoryAbstract
  9. {
  10. public abstract IRace CreateRace();
  11. public abstract IArmy CreateArmy();
  12. public abstract IHero CreateHero();
  13. public abstract IResource CreateResource();
  14. //public abstract ILuck CreateLuck();
  15. }
  1. /// <summary>
  2. /// 一个工厂负责一些产品的创建
  3. /// </summary>
  4. public class HumanFactory : FactoryAbstract
  5. {
  6. public override IRace CreateRace()
  7. {
  8. return new Human();
  9. }
  10. public override IArmy CreateArmy()
  11. {
  12. return new HumanArmy();
  13. }
  14. public override IHero CreateHero()
  15. {
  16. return new HumanHero();
  17. }
  18. public override IResource CreateResource()
  19. {
  20. return new HumanResource();
  21. }
  22. }
  1. /// <summary>
  2. /// 一个工厂负责一些产品的创建
  3. /// </summary>
  4. public class ORCFactory : FactoryAbstract
  5. {
  6. public override IRace CreateRace()
  7. {
  8. return new ORC();
  9. }
  10. public override IArmy CreateArmy()
  11. {
  12. return new ORCArmy();
  13. }
  14. public override IHero CreateHero()
  15. {
  16. return new ORCHero();
  17. }
  18. public override IResource CreateResource()
  19. {
  20. return new ORCResource();
  21. }
  22. }
  1. /// <summary>
  2. /// 一个工厂负责一些产品的创建
  3. /// </summary>
  4. public class UndeadFactory : FactoryAbstract
  5. {
  6. public override IRace CreateRace()
  7. {
  8. return new Undead();
  9. }
  10. public override IArmy CreateArmy()
  11. {
  12. return new UndeadArmy();
  13. }
  14. public override IHero CreateHero()
  15. {
  16. return new UndeadHero();
  17. }
  18. public override IResource CreateResource()
  19. {
  20. return new UndeadResource();
  21. }
  22. }
  1. {
  2. IRace race = new Undead();
  3. IArmy army = new UndeadArmy();
  4. IHero hero = new UndeadHero();
  5. IResource resource = new UndeadResource();
  6. //1 对象转移,屏蔽细节,让使用者更轻松
  7. //2 对象簇的工厂
  8. }
  9. {
  10. //System.Data.SqlClient.SqlClientFactory
  11. FactoryAbstract undeadFactory = new UndeadFactory();
  12. IRace race = undeadFactory.CreateRace();// new Undead();
  13. IArmy army = undeadFactory.CreateArmy();//new UndeadArmy();
  14. IHero hero = undeadFactory.CreateHero();//new UndeadHero();
  15. IResource resource = undeadFactory.CreateResource();//new UndeadResource();
  16. }
  17. {
  18. FactoryAbstract humanFactory = new HumanFactory();
  19. IRace race = humanFactory.CreateRace();
  20. IArmy army = humanFactory.CreateArmy();
  21. IHero hero = humanFactory.CreateHero();
  22. IResource resource = humanFactory.CreateResource();
  23. }
  24. {
  25. FactoryAbstract humanFactory = new ORCFactory();
  26. IRace race = humanFactory.CreateRace();
  27. IArmy army = humanFactory.CreateArmy();
  28. IHero hero = humanFactory.CreateHero();
  29. IResource resource = humanFactory.CreateResource();
  30. }

 

  1. /// <summary>
  2. /// War3种族之一
  3. /// </summary>
  4. public class Human : IRace
  5. {
  6. public Human(int id, DateTime dateTime, string reamrk)
  7. { }
  8. public Human()
  9. { }
  10. public void ShowKing()
  11. {
  12. Console.WriteLine("The King of {0} is {1}", this.GetType().Name, "Sky");
  13. }
  14. }
  15. public class HumanArmy : IArmy
  16. {
  17. public void ShowArmy()
  18. {
  19. Console.WriteLine("The Army of {0} is {1}", this.GetType().Name, "footman,火枪,骑士,狮鹫");
  20. }
  21. }
  22. public class HumanHero : IHero
  23. {
  24. public void ShowHero()
  25. {
  26. Console.WriteLine("The Army of {0} is {1}", this.GetType().Name, "大法师、山丘、圣骑士、血法师");
  27. }
  28. }
  29. public class HumanResource : IResource
  30. {
  31. public void ShowResource()
  32. {
  33. Console.WriteLine("The Army of {0} is {1}", this.GetType().Name, "1000G1000W");
  34. }
  35. }
View Code

 

原文链接:http://www.cnblogs.com/taotaozhuanyong/p/11551077.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号