您的位置:首页 > 其它

工厂模式之我见

2015-09-17 23:18 267 查看
实质:

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

使用实例:

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();从而在实现业务时无需显示的创建工厂或者实例对象。

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

2、工厂方法模式与抽象工厂模式。

为什么我要将他们放在一起呢?因为我觉得他们的精髓是一致的-----在于降低模块之间的耦合(注意是模块之间,如果是同一模块则没有多大意义了)

Uml描述:

工厂方法



抽象工厂模式



然后再看一下模块关系图



代码略。工厂方法和抽象工厂在用于分层时,层级之间的调用显示出其应用的威力。当然他们的应用更多的是考虑开闭原则(扩展开放而修改关闭---简单工厂的缺陷)程序设计原则,

综述:

曾经一直执着于工厂模式是将对象的创建变成了工厂的创建,再由工厂类来创建实际的对象。想了好久都没能理解,很多blog上也是将其实例的发出来,但我却没能理解工厂模式的真谛,谨以此记下自己的理解。

工厂模式基于对代码的提炼和重构,将对象之间强创建抽象成方法、引用的高度,实现松耦合,及精简了代码,也让代码更加优美。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: