设计模式——抽象工厂 [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
相关文档:
编译eclair碰到java version "1.5.0_18"问题的解决
make提示:
Your version is: java version "1.5.0_18"
修改
build\core\main.mk
# Check for the correct version of java
java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.6[\. "$$]')
改成:
java_version := $(shell java -ve ......
经过长时间的面试,以下是JAVA面试的常见的笔试题的整理。
1、String和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操纵字符串,即包含多个字符的字符数据。
String类提供了数值不可变的字符串。StringBuffer类提供的字符串进行修改。当知道字符数据要改变 ......
import java.net.*;
import java.io.*;
public class URLReader {
public static void main(String[] args) throws Exception {
URL yahoo = new URL("网址");
BufferedReader in = new BufferedReader(new InputStreamReader(yahoo.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) ......
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。
一、Java编程入门类
对于没有Java编程经验的Java程序员要入门,随便读什么入门书籍都一 ......
《Java高级技术》课程简介
1. Java程序设计语言引论
2. Java语言的结构化特性
3.1. Java语言的面向对象特性(1)
3.2. Java语言的面向对象特性(2)
3.3. Java语言的面向对象特性(3)
3.4. Java语言的面向对象特性(4)
4.1. 面向对象设计原则
4.2. 面向对象设计模式示例
5.1. Java的异常处理机制
5.2. Java语言 ......