码迷,mamicode.com
首页 > 其他好文 > 详细

工厂模式之我见

时间:2015-09-18 00:38:06      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:

实质:

工厂模式是将对象的创建嫁祸给工厂类, 降低对象之间的耦合。

使用实例:

1、简单工厂---也叫静态工厂

其精髓在于静态:当需要创建新对象时,只需通过静态方法直接调用创建即可,没有了工厂类,目标对象的创建。这也就形成了对原创建逻辑的重组与优化。

 public interface IService
        {
            bool Summit();
        }
        public class NormalOrderService : IService
        {
            public bool Summit()
            {
                //TODO summit the normal order
                return false;
            }
        }
        public class ApplyOrderService : IService
        {
            void CreateOrder();
            public bool Summit()
            {
                CreateOrder();
                //TODO summit the apply order
                return false;
            }
        }
        public class BookOrderService : IService
        {
            bool CheckDate(DateTime time);
            public bool Summit()
            {
                if (CheckDate(DateTime.Now))
                {
                    //TODO Summit the bookOrder
                    return true;
                }
                else
                { 
                    return false;
                }
            }
        }

        public class ServiceFactory
        {
            public static  IService CreateService(string orderType)
            {
                switch (orderType)
                { 
                    case "Normal":
                        return new NormalOrderService();
                    case "Apply":
                        return new ApplyOrderService();
                    case "Book":
                        return new BookOrderService();
                    default:
                        return null;
                    }
            }
        }

调用时直接调用ServiceFactory.CreateService().Summit();从而在实现业务时无需显示的创建工厂或者实例对象。

其弊端则是当新增一种服务时,工厂类则需要进行改动,相当于影响到已有的代码,不符合开闭原则。

 

工厂模式之我见

标签:

原文地址:http://www.cnblogs.com/Joy-et/p/4817955.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!