热门关键字:
jquery > jquery教程 > html5 > 三:简单工厂模式

三:简单工厂模式

206
作者:管理员
发布时间:2020/3/24 11:01:20
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=1099

  定义:从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactoryMethod)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

  定义中最重要的一句话就是,由一个工厂对象决定创建出哪一种产品类的实例,这个LZ在下面会专门举一个现实应用中的例子去展现。

  另外给出简单工厂模式的类图,本类图以及上面的定义都引自百度百科。

  可以看出,上面总共有三种类,一个是工厂类Creator,一个是产品接口IProduct,一个便是具体的产品,例如产品A和产品B,这之中,工厂类负责整个创建产品的逻辑判断,所以为了使工厂类能够知道我们需要哪一种产品,我们需要在创建产品时传递给工厂类一个参数,去表明我们想要创建哪种产品。

  下面LZ将上面的类图转化为更为简单的JAVA代码,便于清晰的展示上面类图中各个类之间的关系。

  首先是产品接口。

  publicinterfaceIProduct{

  publicvoidmethod();

  }

  两个具体的产品。

  复制代码

  publicclassProductAimplementsIProduct{

  publicvoidmethod(){

  System.out.println("产品A方法");

  }

  }

  复制代码复制代码

  publicclassProductBimplementsIProduct{

  publicvoidmethod(){

  System.out.println("产品B方法");

  }

  }

  复制代码

  下面是工厂类。

  复制代码

  publicclassCreator{

  privateCreator(){}

  publicstaticIProductcreateProduct(StringproductName){

  if(productName==null){

  returnnull;

  }

  if(productName.equals("A")){

  returnnewProductA();

  }elseif(productName.equals("B")){

  returnnewProductB();

  }else{

  returnnull;

  }

  }

  }

  复制代码

  最终客户端调用,并显示结果。

  复制代码

  publicclassClient{

  publicstaticvoidmain(String[]args){

  IProductproduct1=Creator.createProduct("A");

  product1.method();

  IProductproduct2=Creator.createProduct("B");

  product2.method();

  }

  }

  复制代码

  上面便是整个类图转换为JAVA代码的简单例子,将上面标准的简单工厂模式的类图和代码给出,是为了一些新手先熟悉一下这个设计模式的大体框架,方便我们下面使用实际的例子去阐述的时候更加容易理解。

  下面LZ就找一个各位基本上都使用过或者将来要使用的一个例子来说明简单工厂模式,我们去模拟一个简单的struts2的功能。

  LZ会自己制作一个简单的WEB项目来做例子,其中会忽略掉很多细节,目的是为了突出我们的简单工厂模式。

  众所周知,我们平时开发web项目大部分是以spring作为平台,来集成各个组件,比如集成struts2来完成业务层与表现层的逻辑,集成hibernate或者ibatis来完成持久层的逻辑。

  struts2在这个过程当中提供了分离数据持久层,业务逻辑层以及表现层的责任,有了Struts2,我们不再需要servlet,而是可以将一个普通的Action类作为处理业务逻辑的单元,然后将表现层交给特定的视图去处理,比如JSP,template等等。

  我们来尝试着写一个非常非常简单的web项目,来看看在最原始的时候,也就是没有spring,struts2等等这些个开源框架的时候,我们都是怎么过的。

  由于LZ会省略WEB架构过程当中的很多细节,所以最好是各位亲手做过一些项目,相对而言看起来会更有体会一些,不过LZ相信既然有兴趣来看设计模式,应该都基本上有过这种锻炼。





如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:html
友荐云推荐