Android编程观察者模式设计Word文档下载推荐.docx
- 文档编号:19253764
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:15
- 大小:18.11KB
Android编程观察者模式设计Word文档下载推荐.docx
《Android编程观察者模式设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Android编程观察者模式设计Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
title>
远程视频会见系统<
/title>
local_port>
12600<
/local_port>
schedule_service_ip>
10.58.1.59<
/schedule_service_ip>
schedule_service_port>
12601<
/schedule_service_port>
/config>
源代码:
Config_Info.java:
[java]viewplaincopy在CODE上查看代码片派生到我的代码片
/**
*配置信息数据类型
*新建时间:
2014/12/8byjdh
*/
packagecom.example.helloanychat;
publicclassConfig_Info{
//标题
publicStringtitle;
//本机ip
publicStringlocal_ip;
//本机端口
publicintlocal_port;
//调度服务器ip
publicStringschedule_server_ip;
//调度服务器端口
publicintschedule_server_port;
}
IF_Config.java:
*接口:
配置类,读写
publicinterfaceIF_Config{
publicConfig_Infoget_config_info();
IF_Subject_Config.java:
配置类,观察者模式:
目标
*新建时间:
publicinterfaceIF_Subject_Config{
publicvoidregister_observer(IF_Observer_Configobserver);
publicvoidremove_observer(IF_Observer_Configobserver);
publicvoidnotify_observer();
IF_Observer_Config.java:
观察者
publicinterfaceIF_Observer_Config{
publicvoidupdate(Config_Infoinfo);
Config.java:
*配置信息类
*新建日期:
*修改日期:
2014/12/9byjdh
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.StringWriter;
import.Inet6Address;
import.InetAddress;
import.NetworkInterface;
import.SocketException;
importjava.util.ArrayList;
importjava.util.Enumeration;
importjava.util.List;
importjava.util.Timer;
importjava.util.TimerTask;
importjavax.xml.parsers.DocumentBuilder;
importjavax.xml.parsers.DocumentBuilderFactory;
importandroid.os.Environment;
importandroid.util.Log;
importorg.w3c.dom.Document;
importorg.w3c.dom.Element;
importorg.w3c.dom.NodeList;
importorg.xmlpull.v1.XmlPullParserFactory;
importorg.xmlpull.v1.XmlSerializer;
publicclassConfigimplementsIF_Config,IF_Subject_Config{
//配置信息
privateConfig_InfoInfo=newConfig_Info();
//存储观察者的列表
privateList<
IF_Observer_Config>
Observers=newArrayList<
();
//定时器
privateTimerTimer_Work=newTimer();
//工作间隔,单位:
ms
privatefinalintINTERVAL_WORK=5000;
/**
*构造函数
publicConfig(){
//生成配置信息
generate_config_info();
//创建定时线程
Timer_Work.schedule(newTask(),INTERVAL_WORK,INTERVAL_WORK);
//定时任务
}
//接口:
读写
@Override
publicConfig_Infoget_config_info(){
returnInfo;
//读写,观察者模式:
publicvoidregister_observer(IF_Observer_Configobserver){
Observers.add(observer);
publicvoidremove_observer(IF_Observer_Configobserver){
intindex=Observers.indexOf(observer);
if(dex>
=0){
Observers.remove(observer);
publicvoidnotify_observer(){
for(inti=0;
i<
Observers.size();
i++){
IF_Observer_Configo=(IF_Observer_Config)Observers.get(i);
o.update(Info);
*得到本机ip地址
*@return本机ip地址
privateStringgetLocalIpAddress(){
try{
for(Enumeration<
NetworkInterface>
en=NetworkInterface
.getNetworkInterfaces();
en.hasMoreElements();
){
NetworkInterfaceintf=en.nextElement();
InetAddress>
enumIpAddr=intf
.getInetAddresses();
enumIpAddr.hasMoreElements();
InetAddressinetAddress=enumIpAddr.nextElement();
//if(!
inetAddress.isLoopbackAddress()){
if(!
inetAddress.isLoopbackAddress()&
&
!
(inetAddressinstanceofInet6Address)){
returninetAddress.getHostAddress().toString();
}catch(SocketExceptionex){
Log.e("
WifiPreferenceIpAddress"
ex.toString());
returnnull;
*生成xml配置文件的String数据流
*Config_Info的本机ip信息不会保存
*@paraminfo:
配置信息
*@returnxml的String数据流
privateStringproduce_xml_string(Config_Infoinfo){
StringWriterstringWriter=newStringWriter();
//获取XmlSerializer对象
XmlPullParserFactoryfactory=XmlPullParserFactory.newInstance();
XmlSerializerxmlSerializer=factory.newSerializer();
//设置输出流对象
xmlSerializer.setOutput(stringWriter);
//开始标签
xmlSerializer.startDocument("
utf-8"
true);
xmlSerializer.startTag(null,"
config"
);
title"
xmlSerializer.text(info.title);
xmlSerializer.endTag(null,"
local_port"
xmlSerializer.text(Integer.toString(info.local_port));
schedule_service_ip"
xmlSerializer.text(info.schedule_server_ip);
schedule_service_port"
xmlSerializer.text(Integer.toString(info.schedule_server_port));
xmlSerializer.endDocument();
}catch(Eeptione){
e.printStackTrace();
returnstringWriter.toString();
*工作任务:
得到配置信息
privatevoidgenerate_config_info()
{
booleanok;
Filesd_path;
Filefile_cfg_dir;
Filefile_cfg;
FileOutputStreamout;
Stringstr;
FileInputStreamin;
Config_Infoinfo=newConfig_Info();
//得到本机ip地址
info.local_ip=getLocalIpAddress();
//获取SD卡目录
sd_path=Environment.getExternalStorageDirectory();
//判断文件夹是否存在
file_cfg_dir=newFile(sd_path.getPath()+"
//Remote_Meeting"
file_cfg_dir.exists()&
file_cfg_dir.isDirectory()){
System.out.println("
配置文件夹Remote_Meeting不存在!
"
ok=file_cfg_dir.mkdirs();
if(ok){
创建文件夹成功!
}else{
创建文件夹失败!
//判断配置文件是否存在
file_cfg=newFile(file_cfg_dir.getPath(),"
cfg.xml"
file_cfg.exists())
配置文件cfg.xml不存在!
file_cfg.createNewFile();
创建文件cfg.xml成功!
//生成初始化的配置数据
out=newFileOutputStream(file_cfg);
//保存默认配置
Info.title="
远程视频会见系统"
;
Info.local_port=12600;
Info.schedule_server_ip="
10.58.1.59"
Info.schedule_server_port=12601;
str=produce_xml_string(Info);
out.write(str.getBytes());
out.close();
//保存本机ip
Info.local_ip=info.local_ip;
//通知观察者
notify_observer();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
else
//解析xml文件
in=newFileInputStream(file_cfg);
DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();
DocumentBuilderbuilder=factory.newDocumentBuilder();
Documentdocument=builder.parse(in);
//获取根节点
Elementroot=document.getDocumentElement();
NodeListnode=root.getChildNodes();
//获得第1子节点:
标题
info.title=node.item(0).getFirstChild().getNodeValue();
//获得第2子节点:
本机端口
ocal_port=Integer.parseInt(node.item
(1).getFirstChild().getNodeValue());
//获得第3子节点:
调度服务器ip
info.schedule_server_ip=node.item
(2).getFirstChild().getNodeValue();
//获得第4子节点:
调度服务器端口
info.schedule_server_port=Integer.parseInt(node.item(3).getFirstChild().getNodeValue());
//判断配置信息是否变更
do
info.title.equals(Info.title))
break;
info.local_ip.equals(Info.local_ip))
if(info.local_port!
=Info.local_port)
info.schedule_server_ip.equals(Info.schedule_server_ip))
if(info.schedule_server_port!
=Info.schedule_server_port)
//全部相同
return;
}while(false);
//赋值
Info.title=info.title;
Info.local_port=info.local_port;
Info.schedule_server_ip=info.schedule_server_ip;
Info.schedule_server_port=info.schedule_server_port;
}catch(Exceptione){
*定时器线程定时工作
privateclassTaskextendsTimerTask{
publicvoidrun(){
TestClass.java:
publicclassTestClassimplementsIF_Observer_Config{
publicTestClass(){
publicvoidupdate(Config_Infoinfo){
System.out.printf("
-------------更新数据:
%s,%s,%d,%s,%d\n"
info.title,info.local_ip,info.local_port,info.schedule_server_ip,info.schedule_server_port);
MainActivity:
TestClasstestclass=newTestClass();
Configconfig=ewConfig();
mEditIP.setText(config.get_config_info().local_ip);
config.regi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 编程 观察者 模式 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)