-----引言:因为实验室开例会要分享点东西,我就被提议分享设计模式了,也了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{
……
}
}
}
这个是比较优雅的工厂模式,其实工厂模式还有抽象的工厂模式的。
抽象工厂的定义:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定的具体类。