网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C# > 正文
设计模式初学者系列-工厂方法
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/14
下载{$ArticleTitle}原创论文样式
Author: 横刀天笑 
From:  横刀天笑 ''s Blog
闲谈工厂方法

     设计模式系列到了第四篇了,如果还不谈谈工厂方法设计模式就太对不起GoF了,为什么有如此一说?实际上工厂方法模式是好些模式的基石,她们或多或少的使用了工厂方法模式或以工厂方法为模型。
    工厂方法模式是一种类创建型模式,她为创建一个对象提供了一个稳定的接口,而将对象创建的真正工作推迟到其子类实现,工厂方法允许将类的初始化工作延迟到子类,让子类决定实例化哪个具体的类。实际上很多时候对象的创建工作往往会发生变化,直接的去用new实例化对象会导致紧耦合,当需求发生变化的时候依赖项也会跟着发生变化。按照我们解决这类问题的一般原则:首先寻找变化点――对象创建,然后封装变化――用子类来封装,父类给客户程序提供稳定的接口,不稳定的地方给封装了,客户可见的只有稳定的父类接口,这也是我们面向对象开发人员一直所追求的目标。

工厂方法举例
  
既然是谈工厂方法模式,我们就来用工厂举例吧。在举例之前先用一个类图来大致了解一下GoF的工厂方法模式的结构。


DEMO

问题描述:可口可乐公司的可乐瓶上粘贴广告条的工序,当一个可乐瓶到来的时候控制程序调用贴广告的类提供产生一个广告条的接口,假设流水线上来的可乐瓶有大有小(现实中肯定是不可能的了),那么这个接口就应该提供这样的实现:根据不同的可乐瓶产生不同的广告纸,这个广告纸的产生就是一个需求经常变化的环节(根据公司市场促销的变化广告纸需要变化等等)。

不用模式的实现:

public class 流水线
{
    public void 矿泉水瓶到来(int 型别)
    {
        广告纸 ggz = Get广告纸(型别);
        //贴上去
         }
       广告纸 Get广告纸(int型别码)
       {
        switch(型别码)
{
            case A : return new A广告纸();break;
            case B : return new B广告纸();break;
          //……..
}
}

当然,如果需求不再变化这种实现没有什么不妥,而且性能高效。但是不存在需求不变的程序,产生广告纸需求变化我们就得不断的修改这个switch,这个流水线要经常改变,而且车间里的流水线往往不止一条,改动起来非常麻烦,意大利面条式的程序出现了(违反了开闭原则)。

为了向客户提供稳定的接口我们将产生广告纸的实现延迟到子类实现

public class Creator
{
    public virtual 广告纸 Get广告纸(int 型别码)
    {
        return new 默认广告纸();
}
}
public class ConcreteCreator : Creator
{
    public override 广告纸 Get广告纸(int 型别码)
{
         switch(型别码)
{
            case A : return
  • 上一篇资讯: C#操作RTF文档
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号