模式设计(一)------工厂模式
来源:互联网 发布: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{
……
}
}
}
这个是比较优雅的工厂模式,其实工厂模式还有抽象的工厂模式的。
抽象工厂的定义:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定的具体类。
- Java设计模式:工厂模式(一)简单工厂模式
- C++ 设计模式 (一) 工厂模式
- 设计模式之 工厂模式(一)
- 设计模式之工厂模式(一)
- 模式设计(一)------工厂模式
- 设计模式(一)--静态工厂模式
- 设计模式-工厂模式(一)
- 设计模式(一):简单工厂模式
- 设计模式(一)--工厂模式
- 设计模式(一):工厂方法模式
- 设计模式(一)简单工厂模式
- java设计模式(一)---工厂模式
- Java设计模式----工厂模式(一)
- 设计模式c++(一)----工厂模式
- C++设计模式(一) 工厂模式
- 设计模式(一)简单工厂模式
- 设计模式学习(一)工厂模式
- c++设计模式(一)工厂模式
- vs2008+opencv显示视频问题汇总
- C#泛型编程
- operator
- C# 关于“未将对象引用设置到对象的实例。”错误
- Android推送方式比较
- 模式设计(一)------工厂模式
- JSF 2.0 传参
- 互联网产品设计法则
- 黑马程序员_c#基础知识学习笔记:习题ReadInt及冒泡排序
- 编写一个Qt支持TGA图像格式的插件
- 《Linux游戏编程》——理解Linux文件系统标准
- [android研究联系人之二]联系人Email/Nickname数据操作
- Java线程_07_线程池
- ListView 实现点击侧边A-Z快速查找