`
wojiaolongyinong
  • 浏览: 72920 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

浅谈简单工厂设计模式

阅读更多

                                                             简单工厂设计模式
    核心:接口
     思想:封装隔离
  
    其实可以说,简单工厂设计模式就是总结出上面这两个方面,但是远远不是这两个这么简单。首先,在说明简单工厂设计模式的概念之前,来想想接口吧。
   接口:里面定义的方法都是抽象的方法,定义的变量都是常量
   我们通常实现接口,来实现里面规定的抽象方法,那么实现类的外观就是这个接口所提供,我们之前使用最多的是接口关于多态性的部分。比如在之前的监听器设计模式中,对于通信项目来减弱数据层与表现层耦合性,我们就是利用了接口的这一特性。
   现在这样想一下,我们编写一个类,实现了一个接口,相当与我们实现了一份契约,可以说这个接口限定了我们对外所能调用的方法(当然也可以编写不属于接口里面的方法, 但是接口规定了至少向外提供的方法),那么对于这个类就产生了约束,对于不同的实现类,相同的方法,可以有不同的实现。
   其实现在我们就可以感受到,接口的思想既是“封装隔离”,我们只要接口对外的方法调用不变,我们对于内部可以进行任何改动而无需修改调用,也就是我们的程序具有一种组装性。
 
 下来看一下例子吧,有一个感性的认识:
 1.假如有一个接口,如下:

/**
*一个表示可以移动的对象接口
*移动的对象都必须有一个移动的方法move(String type)
*其中的参数可以告诉怎么移动
*/
public interface MoveEntry{
         public void move(String type);
}

 
  2.现在造一辆车,实现接口
 

public class Car implements MoveEntry{
         public void move(String type){
	      System.out.println("现在汽车在跑" + type);
          }
}

 
 3.现在一个客户不知道想要什么交通工具,只想看一下这个可以移动的对象移动的怎么样

public class Client{
         public static void main(String[] args){
	      MoveEntry entry = new Car();
	      entry.move("加速!");
          }
}

 
         在我们之前使用接口的过程中,我们一般使用的过程都是这样的,但是我们从上面说的接口的思想"封装隔离"来看,上面的实现过程没有达到我们想要的效果,因为客户已经知道,是一辆车在跑,但是他不想知道是什么,只要看到移动的效果就好,那么我们就不可以这样了。
       现在就是简单工厂设计模式上场的时候了,这样描述一下吧,我们需要一个工厂造出我们需要的对象,我们不关心工厂里面怎么实现,而且我们可以将工厂封装起来,使得只可以客户端进行方法的调用,那么这样就可以将客户端和实现接口之间的类用一个工厂进行隔离,减少了实现类与客户端之间的耦合性。下来就可以看看简单工厂如果处理上面的情况:
       1.接口仍然是上面的那个接口,也是那个实现Car的类不变,只是增加一个工厂类

public class Factory{
         public static MoveEntry createMoveEntry(){
	      return new Car();
         }
}

 
  2.那么现在客户端调用就可以这样进行了
 

public class Client{
         public static void main(String[] ahrs){
	        MoveEntry entry = Factory.createMoveEntry();
                entry.move("加速吧!");
          }
}

 
         由上面我们就可以知道,现在客户端完全不用知道是谁实现了接口,只需要调用工厂里面的方法,获取对象即可,这样就实现了"封装隔离",也许我们会问,无非就是将实现移动到工厂类中,但是我们完全可以将工 厂类封装起来,不对外进行显示,只提供调用方法,这样就减弱了实现类与客户端之间的耦合性。
       上面算是一个基本的简单工厂设计模式已经完成,可以有一点感性的认识,但是简单工厂设计模式绝不仅仅是这样,它可以提供我们想实现封装的任何类,而且可以根据我们传入的参数进行有选择性的实现返回,我们可以将每次新的实现写到配置文件中,在工厂中读取配置文件反射生成实现类是一种更好的扩展方法。这些我们都可以在项目中去使用,来使我们的项目更完美!

 

         看着这一篇博客,再看一下上一次的时间,感觉空间充满了灰尘,其中好几次博客已经写下来,但是存活时间不会超过10秒钟,删掉。。。。。自己也不知道为什么,现在总想要一种答案,不是对于技术的,只是对于这个阶段的,一直在看人物传记希望给自己一份想要的答案,但是却在寻找中让手边的事拉了下来,或许每个人都有这样一段时间吧。继续寻找答案,但是做好技术!

0
1
分享到:
评论

相关推荐

    浅谈工厂模式

    浅谈简单工厂模式、工厂方法模式、抽象工厂模式。注释写的很清楚,UML图画的也很清楚,文档写的也很清楚。希望对您有帮助。欢迎拍砖。

    浅谈C#设计模式之工厂模式

    工厂模式和简单工厂有什么区别。废话不多说,对比第一篇例子应该很清楚能看出来。 优点: 工厂模式弥补了简单工厂模式中违背开放-封闭原则,又保持了封装对象创建过程的优点。 代码如下: using System; using ...

    Java设计模式 版本2

    Java设计模式,目录:前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一...

    design-pattern-java.pdf

    基础知识 基础知识设计模式概述 从招式与内功谈起——设计模式概述(一) 从招式与内功谈起——设计模式概述(二) 从招式与内功谈起——设计模式概述(三) 面向对象设计原则 面向对象设计原则之单一职责原则 面向...

    asp.net知识库

    也谈 ASP.NET 1.1 中 QueryString 的安全获取写法 ASP.NET运行模式:PageHandlerFactory 利用搜索引擎引用来高亮页面关键字 网站首页的自动语言切换 应用系统的多语言支持 (一) 应用系统的多语言支持 (二) 自动...

    浅谈js对象的创建和对6种继承模式的理解和遐想

    为了便于理解记忆,我遐想了一个过程,对6中模式进行了简单的阐述。 很长的一个故事,姑且起个名字叫女娲造人吧。 创建对象 女娲一个一个的捏人(创建对象),这样太慢,于是设计了一种机器(函数),想造什么样的,...

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

    Python核心编程(第二版).pdf (压缩包分2部分,第二部分)

     6.20 *拷贝python对象、浅拷贝和深拷贝   6.21 序列类型小结   6.22 练习   第7章 映像和集合类型   7.1 映射类型:字典   7.1.1 如何创建字典和给字典赋值   7.1.2 如何访问字典中的值   ...

    Python核心编程(第二版).pdf (压缩包分2部分,第一部分)

     6.20 *拷贝python对象、浅拷贝和深拷贝   6.21 序列类型小结   6.22 练习   第7章 映像和集合类型   7.1 映射类型:字典   7.1.1 如何创建字典和给字典赋值   7.1.2 如何访问字典中的值   ...

    Python核心编程第二版(ok)

     6.20 拷贝Python对象.c浅拷贝和深拷贝   6.21 序列类型小结   6.22 练习   第7章 映像和集合类型   7.1 映射类型:字典   7.1.1 如何创建字典和给字典赋值   7.1.2 如何访问字典中的值   ...

    Python核心编程第二版

     6.20 *拷贝Python对象、浅拷贝和深拷贝   6.21 序列类型小结   6.22 练习   第7章 映像和集合类型   7.1 映射类型:字典   7.1.1 如何创建字典和给字典赋值   7.1.2 如何访问字典中的值   ...

Global site tag (gtag.js) - Google Analytics