模式设计(一)------工厂模式

来源:互联网 发布:gta5优化 编辑:程序博客网 时间:2024/04/29 13:39

        -----引言:因为实验室开例会要分享点东西,我就被提议分享设计模式了,也了PPT(用HTML/CSS写的),顺便也记录下来。还有以下代码为伪代码,我用记事本随便写的,那些UML图由于时间和其他原因,没有用工具去画,只是随便P了几张图,也没有去细想,假如有错,请提醒下我这个菜鸟。(迟点有空会补上正确的UML图)


                                                                工厂模式:

   设计原则:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

   抽象定义:很多人都知道,工厂模式通俗来说就是给它原料,不管它如何运作,总之只需要最后的结果对就行了,但是却有很多人对工厂模式误解了。

   看图说话:

 

 

简单的工厂模式:  (其实这种是比较2B的方法,而且严格上来说其实这种不属于工厂模式,呵呵!)

 

Public class pizzaFactory(String type){

         If(type.equal(“pizza1”)){

                   XXOO…..

         }

         Elseif( type.equal(“pizza1”){

                   XXOO…..

}

…………….

Else {

         XXOO…..

}

}


好吧,虽然只是一种比较2B的方法,但我们的营业额上去了,要开分店了,但是这种工厂模式.

 

那我们来看一下比较优雅的工厂模式,顺便来拓展一下:

继续看图:

 

 

PizzaStores是一个抽象类,PizzaStore1和PizzaStore1分别继承它。

而他们生产的Pizza也是一个抽象类,具体的pizza1和pizza2和pizza3和pizza4都是pizza的子类。

 

大家会疑惑,这不是更复杂么?这么多继承的关系,我倒不如还是if好了!

优点:

1:你用if的话,我现在2间分店,你只有一个工厂,所以只能在大混杂了…..

2:好,我要修改在工厂1中的pizza1的烹饪方法,好吧,我就会痛苦地在你那堆if,else,if,else……..if else中挣扎着!我只需要看看在具体的那个pizza类找找就OK了。

好吧,我就随手写下代码给大家看看吧:

 

Public abstractclass PizzaStore{

Public abstract voidcreatepizza(String type);

Public abstract voidorder();

}

 

Public abstract class Store1 extendsPizzaStore{

         Public void order(){

}

Public void createpizza(type){

    Pizzapizza = Factory.createPizza(type);

}

}

 

Public abstract class pizza{

         publicabstract void dojob1();

         publicabstract void dojob2();

}

 

Public class Pizza1{

         Publicvoid dojob1(){

                   XXOO…

}

Public voiddojob2(){

         XXOO…

}

}

 

Public class Factory {

         Pizzapizza;

         PublicPizzacreatePizza(String type){

                   If(type.equal.(“pizza1”)){

                            pizza =new Pizaa1();

}

Else if(…..){

    …….

}

…….

Else{

         ……

}

}

}

这个是比较优雅的工厂模式,其实工厂模式还有抽象的工厂模式的。

抽象工厂的定义:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定的具体类。