Android--Socket之单例模式
来源:互联网 发布:莫里斯迈斯纳 知乎 编辑:程序博客网 时间:2024/06/17 13:04
首先先来了解一下什么是单例模式?
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。
Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”
Java单例模式例子
public class SingletonClass{ private static volatile SingletonClass instance=null; public static SingletonClass getInstance(){ synchronized(SingletonClass.class){ if(instance==null){ instance=new SingletonClass(); } } return instance; } private SingletonClass(){}}
优点
一、实例控制
单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
二、灵活性
因为类控制了实例化过程,所以类可以灵活更改实例化过程。
缺点
一、开销
虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
二、可能的开发混淆
使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。
三、对象生存期
不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.NET Framework的语言),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。
单例模式详解:http://baike.baidu.com/link?url=1428jugDvmIt3sPaPLeuX0CxHKVXL8PZ-MIyeg7byC_YeBmV_XNkDALIc2ybNTAYND4sv8QYUgDCOwmWrwW-6c1pqhnBNIuXaMIS-ovYrPTgiIIAMPmZr89H9CB-N9Xe#6_1
接下来在Android中使用单例模式创建socket类public class SocketUtil { private static final String ADDRESS = SocketConstant.ADDRESS; private static final int PORT = SocketConstant.PORT; public static Socket socket = null; public static BufferedReader br = null; public static OutputStream out = null; public static Activity activity = null; /** * 连接socket * * @throws IOException */ public static void connectSocket() { new Thread() { public void run() { try { Log.i("ConnectSocket", "进行连接服务端"); socket = new Socket(ADDRESS, PORT); Log.i("ConnectSocket", "连接服务端成功"); //获取输入输出流 getSocketStream(); //启动接受消息的线程 startReadMsgThread(); sendMsg("你好.好",1); } catch (IOException e) { Log.i("ConnectSocket", "socket连接失败"); e.printStackTrace(); } } /** * 获取Socket通道输入、输出流,并在此将socket信息传到Bean中 * * @throws IOException */ public void getSocketStream() throws IOException { // 获取socket通道的输入、输出流 // 将输入流放到buffer中,可以用readLine来读取信息 Log.i("ConnectSocket", "开始获取输入输出流"); out = socket.getOutputStream(); br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "gb2312")); Log.i("ConnectSocket", "输入输出流获取完毕,out为:" + out + "br为:" + br); } }.start(); } /** * 调用接受服务端消息的方法,启动接受消息的线程 */ public static void startReadMsgThread() { new Thread() { public void run() { Log.i("ConnectSocket", "接受消息的线程启动成功!!!"); while (true) { Log.i("ConnectScoket", "正在接受消息。。。。"); try { Log.i("ServerToClient", br.readLine());// Intent intent = new Intent(activity, MainActivity.class);// activity.startActivity(intent); } catch (IOException e) { e.printStackTrace(); } } } }.start(); } /** * 启动发送消息的线程 * 将消息传入到编辑消息的方法中先进行预处理 * * @param msg 未经过处理的消息内容 * @param type 消息类型 */ public static void sendMsg(String msg, int type) { msg = new EditSendMsgDaoImpl().EditSendMsg(msg, type); startSendMsgThread(msg); } /** * 调用服务端发送消息的方法,启动发送消息的线程 */ public static void startSendMsgThread(String msg) { final String sendMsg = msg; new Thread() { public void run() { Log.i("ConnectSocket", "发送消息的进程启动!!!"); try { Log.i("EditSendMsg", sendMsg); out.write(sendMsg.getBytes()); Log.i("ConnectSocket", "发送消息成功!!!"); } catch (IOException e) { e.printStackTrace(); } } }.start(); } /** * 设置进行跳转的activity * * @param activity 上下文的activity */ public void setActivity(Activity activity) { this.activity = activity; } /** * 关闭socket * * @param socket * @throws IOException */ public static void closeSocket(Socket socket) throws IOException { socket.close(); } /** * 关闭缓冲读取流 * * @param br * @throws IOException */ public static void closeBufferedReader(BufferedReader br) throws IOException { br.close(); } /** * 关闭输出流 * * @param out */ public static void closeOutputStream(OutputStream out) throws IOException { out.close(); }}
使套接字,输入输出流都已static创建的好处就是在不同的类中都可以对Socket对象进行操作。
0 0
- Android--Socket之单例模式
- Android之单例模式
- Android 设计模式 之 单例模式
- Android 设计模式 之 单例模式
- Android 设计模式之单例模式
- Android 设计模式 之 单例模式
- Android 设计模式 之 单例模式
- android设计模式之单例模式
- Android 设计模式 之 单例模式
- Android 设计模式之单例模式
- Android 设计模式之单例模式
- Android 设计模式之单例模式
- Android 设计模式 之 单例模式
- android 设计模式之单例模式
- Android 设计模式 之 单例模式
- Android 设计模式 之 单例模式
- Android 设计模式 之 单例模式
- android 设计模式之单例模式
- android studio新建项目R文件缺失的问题
- Android Socket接口实现即时通讯
- SNMPv3基于视图的访问控制模型VACM
- 机器学习基石 4-2 Probability to the Rescue
- 路由基础(四)静态路由与SLA技术
- Android--Socket之单例模式
- 赛前训练、补题+赛前100题计划
- C++经典面试题库 附带参考答案
- 最短路练习12/poj/2502 Subway dijkstar,spfa,floyd都可以解决
- linux中bin与sbin目录的作用及区别介绍
- sizeof()函数求类型所占字节大小-指针,数组
- IntraWeb
- docker容器之间共享目录
- 动态循环li,获取里面动态添加对象,并组成json