易截截图软件、单文件、免安装、纯绿色、仅160KB

设计模式——抽象工厂 [java]

版权所有,转载注明出处!
转载请携带此信息:huangfox
-----------------------------------------------------------------
抽象工厂和工厂方法 刚开始很容易混淆,至少我是这样的!
不过他们产生的缘由来看,还是可以好好区分的。
1.工厂方法:是为了避免应用直接实例类层次结构中的具体类,提供一个方法根据运行情况实例一个合适的对象(父类类型)给应用层使用。
参考:http://blog.csdn.net/fox009/archive/2010/04/08/5465009.aspx
2.抽象工厂:同样是为了避免应用直接实例类层次结构中的具体类,但是它提供的是一个工厂接口(抽象类),具体的工厂都会实施这个接口,而产生一些对象的类。
总觉得描述这些东西比较拗口,不过看看实例结合自己的理解,应该也会有一个自己的理解和定义。
实例:
1.这是一个有关娱乐的实例,
娱乐的方式分为:音乐 、 电影
娱乐的资源获取方式:本地资源 、 网络资源
需求:用户并不知道底层的类结构,但是只要知道两个指令(娱乐方式、资源获取方式)就可以进行happy。[简单需求]
--uml
代码:
--首先是“音乐”的类层次
package com.fox.atstractFactory2;
/**
* @author huangfox
* 听音乐的接口
*/
public interface Music {
//通过歌名播放歌曲。
public void getMusic(String name);
}

--本地音乐
package com.fox.atstractFactory2;
/**
* @author huangfox
* 本地资源(歌曲)
*/
public class LocalMusic implements Music {
@Override
public void getMusic(String name) {
// TODO Auto-generated method stub
System.out.println("播放本地歌曲:" + name);
System.out.println("啦啦啦啦......");
}

}

--网络音乐
package com.fox.atstractFactory2;
import java.util.Random;
/**
* @author huangfox
* 网络资源(歌曲)
*/
public class NetworkMusic implements Music {
@Override
public void getMusic(String name) {
// TODO Auto-generated method stub
System.out.println("查询网络资源:" + name);
//模拟是否获得资源
int i = new Random().nextInt(2);
if(i%2 == 1){
System.out.println("获得资源:" + name);
System.out.println("啦啦啦啦......");
}else{
System.out.println("查询网络资源&quo


相关文档:

Java面试题和答案


 
Java面试题(答案)
第一,谈谈final, finally, finalize的差别。
final?修饰符(关键字)如果一个类被声明为final,意味着他不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,能确保他们在使用中不被改动。被声明为final的变 ......

提高JAVA性能的集中方法

  2.通常,把与循环index不相关的移到循环的外面
view plaincopy to clipboardprint?
for(int i=0;terminal=x.length;i<terminal;i++){
 X[i]=x[i]/scaleA*scaleB;
}
for(int i=0;terminal=x.length;i<terminal;i++){
X[i]=x[i]/scaleA*scaleB;
}
改为
view plaincopy to clipboardprint?
double ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号