专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »编程思想 » 由浅入深学 工厂模式 (1) »正文

由浅入深学 工厂模式 (1)

来源: 发布时间:星期五, 2009年1月9日 浏览:2次 评论:0
  1、 传授设计模式中存在问题   我个人最近对设计模式中工厂模式进行了比较深入学习通过学习领悟出现在很多设计模式传道者在讲述设计模式过程中存在些问题使得设计模式变得很难理解设计模式本身很抽象但是这些传道者在讲述过程中个抽象东西讲更抽象从而使我们望而却步有些人在讲述时候没有考虑读者注意力比如我在看C#设计模式时候在讲述抽象工厂模式时候直接就进入了个举例而且这个例子比较复杂涉及了比较多概念、术语而且还有算法要处理但是这些和要讲述核心内容无关我想要看懂他举例就要将这个东西都搞懂就分散了我注意力我个人整理总结学习设计模式思路方法是首先找到个突破口比如可以先学习构造型模式中简单模式将它理解、熟练应用通过对、两个模式有个深入认识的后再学习其它比较复杂模式就容易多了这是种迭代思想在学习中应用另外学习任何种设计模式过程应该是具体-抽象-再具体这个个过程这句话意思是首先通过个比较具体例子来帮助理解设计模式在理解的后将你理解扩展到解决这类问题上升到理论高度然后就是再到具体也就是应用设计模式应用理论解决自己遇到实际问题

  2、学习工厂模式预备知识:

  首先声明这些预备知识并不是工厂模式仅仅需要我先讲述工厂模式所以在学习工厂模式的前将这些问题提出

  2.1 Upcasting:

  Upcasting中文翻译有好几个比如向上类型转换、向上转型、上溯造型我个人比较喜欢向上转型这个翻译即简单又含义明确向上转型这个概念我在Bruce Eckel在Thinking in c、Thinking in Java中都看到过我不是很确定这个概念是否是他提出来向上转型是将把个派生类当作它基类使用我们将个更特殊类型转换到个更常规类型这当然是安全派生类是基类个超集它可以包含比基类更多思路方法但它至少包含了基类思路方法向上转型给我们带来好处就是我们可以将区别派生通过种统方式进行处理向上转型带来弊端就是我们向上转型过程会丢失派生类接口既然有向上转型也就有向下转型即DownCasting我们在此不做详细讨论下面使用个例子来举例向上转型

   public Base
   {
     public void Test
     {
       MessageBox.Show("OK");
     }
   }
   public Derive:Base
   {}
   private void button1_Click(object sender, .EventArgs e)
   {
     Base b= Derive;
     b.Test;
   }


  在有名OOD设计原则中有个叫做里氏代换原则(Liskov Substitution Principle, LSP)实质也就是讲向上转型内容是:任何接收父类型地方都应当能够接收子类型换句话说如果使用个基类那么定适用于其子类而且察觉不出基类对象和子类对象区别LSP是继承复用基石只有当派生类可以替换掉基类软件Software功能不受到影响时基类才能真正被复用

  2.2 多态

  我不敢想象离开了多态后设计模式是个什么样子什么是多态我喜欢整理总结这样句话来回答这个问题个接口多种实现”注意这里接口不仅仅表示Interface关键字是广义上接口在C#中实现接口我们有两种途径种是借助继承来实现种是借助Interface来实现

  3、工厂设计模式理论

  3.1 概述

  工厂模式具体包括了简单工厂、工厂思路方法、抽象工厂它们是按照从简单到复杂顺序排列属于设计模式中创建型其中简单工厂并不属于GOF23中模式但是它是理解其它工厂模式个很好基础所以很多人在讲述设计模式时候会提到简单工厂模式创建型模式关注是对象创建创建型模式将创建对象过程进行了抽象也可以理解为将创建对象过程进行了封装作为客户仅仅需要去使用对象而不再关心创建对象过程中逻辑

  3.2 不使用任何模式

  我们现在有这样个设计影像家电(VideoWiring)包括了DVD、VCD在基类VideoWiring中有PlayVideo思路方法子类重载了这个思路方法



  角色介绍说明:

  工厂类(Creator):根据业务逻辑创建具体产品由客户直接

  抽象产品(Product):作为具体产品基类提供统接口也是工厂类要返回类型

  具体产品(Concrete Product):工厂类真正要创建类型上图中仅仅展示了个具体产品有多个产品时候类似

  下面我们对简单工厂模式进行整理总结使用简单工厂好处是:1、充分利用了多态性不管什么具体产品都返回抽象产品2、充分利用了封装性内部产品发生变化时外部使用者不会受到影响缺点是:如果增加了新产品就必须得修改工厂(Factory)抽象工厂模式可以向客户端提供个接口使得客户端在不必指定产品具体类型情况下创建多个产品族中产品对象这就是抽象工厂模式用意



标签:

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: