`
lx0088
  • 浏览: 4042 次
社区版块
存档分类
最新评论

浅谈单例模式

阅读更多

 

       以前开发,很少用的设计模式,即使是最简单的单例模式。

       公司有一个项目要求实现socket客户端长连接,并实现自动重连。心想,如果是长连接的话,那么肯定你的客户端端口不能变。需要绑定端口。同时要没5秒发一次心跳。因为对象绑定,所以不能重新new一个channel。当时第一反应就是单例。可能会有别的更好的方法。可以限于技术有限。不说那么多,上关键代码。不好的地方请指点,往大家勿喷!

       

private static MySocketClient mySocketClient;
	private Selector selector;
	private SocketChannel sc ;
	
	
	private MySocketClient(String ip,int port){
		try {
			this.init(ip, port);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static MySocketClient getInstance(String ip,int port){
		if(mySocketClient == null){
			mySocketClient = new MySocketClient(ip,port);
		}
		return mySocketClient;
	}
	
	public void init(String ip,int port) throws Exception{
		try {
			selector = Selector.open();
			sc = SocketChannel.open();
			sc.socket().bind(new InetSocketAddress(Config.getLocalhostPort()));
			boolean b = sc.connect(new InetSocketAddress(InetAddress.getByName(ip), port));
			System.out.println("是否连接: "+b);
			sc.configureBlocking(false);
			sc.register(selector, SelectionKey.OP_READ);
			new Thread(new Listener(selector)).start();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void sendMessage(String msg){
		try {
			sc.write(ByteBuffer.wrap(msg.getBytes("gbk")));
		} catch (IOException e) {
			try {
				sc.close();
				mySocketClient = null;
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		}
	}

 

		Timer timer = new Timer();
		timer.schedule(new MyTask(), 1000*2, 1000*20);

 

public class MyTask extends TimerTask {

	@Override
	public void run() {
		MySocketClient myc = MySocketClient.getInstance(Config.getHostIp(), Config.getHostPort());
		myc.sendMessage("$PX\r\n");
	}

}

 

分享到:
评论

相关推荐

    浅谈Spring单例Bean与单例模式的区别

    "浅谈Spring单例Bean与单例模式的区别" 本文主要介绍了Spring单例Bean与单例模式的区别,通过对比两者的定义、实现机制和应用场景,帮助读者更好地理解这两种概念的异同。 一、单例模式的定义和实现 单例模式是一...

    C#单例模式视频讲解

    《C#面向对象设计模式纵横谈(2):Singleton 单件(创建型模式)》这个视频教程很可能深入浅出地介绍了单例模式的概念、实现方式以及在实际项目中的应用案例,对于学习和掌握单例模式是很好的参考资料。通过观看和实践...

    浅谈C#单例模式的实现和性能对比

    C#单例模式的实现和性能对比 单例模式是软件工程中使用最多的几种模式之一,它是一种只能存在一个实例的类,在C#中,更准确的说法是在每个AppDomain之中只能存在一个实例的类。单例模式的实现方式有很多种,本文将...

    浅谈java单例设计模式

    单例模式 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 如果我们要让类在一个虚拟机中只能产生一个对象: 将类的...

    浅谈Python反射 & 单例模式

    在Python编程中,反射和单例模式是两种重要的设计原则,它们分别用于增强代码的动态性和控制类实例的创建。 **反射** 是一种允许程序在运行时检查和修改自身行为的能力。在Python中,由于其动态特性,反射得以广泛...

    浅谈JAVASE单例设计模式

    在Java中,单例模式的应用广泛,尤其是在处理系统级服务、配置信息、线程池等需要全局共享的对象时。下面我们将深入探讨单例设计模式的实现方式和注意事项。 1. **饿汉式单例** 饿汉式单例在类加载时就完成了实例...

    浅谈Java编程中的单例设计模式

    在日志工具类的场景中,单例模式的应用尤为恰当,因为它避免了因频繁创建日志对象而导致的内存浪费。 原始的日志工具类`LogUtil`提供了一个简单的日志级别控制功能,通过静态方法`debug`, `info`, `error`根据预设...

    浅谈Java中单例设计模式之构造方法私有化.pdf

    "浅谈Java中单例设计模式之构造方法私有化" 单例设计模式是 Java 中一种常用的设计模式,核心思想是将类的构造方法私有化,以控制实例化对象的产生。这种模式可以确保在程序中只有一个实例化对象存在,这对控制对象...

    浅谈设计模式在Android代码重构中的应用.pdf

    文章通过具体的Android应用开发案例,展示了如何运用设计模式进行代码重构,例如,通过使用单例模式管理网络请求,使用工厂模式简化对象创建,使用观察者模式实现数据的实时更新等。 5. 提升信息素养的重要性 在...

    设计模式浅谈种PPT学习教案.pptx

    本PPT学习教案深入浅谈了设计模式的基本概念和重要原则,同时介绍了几种创建型设计模式。 首先,设计模式产生的原因通常是因为代码的紧密耦合,如对特定类的依赖、硬件和软件平台的依赖、对象表示和实现的依赖等。...

    从追MM浅谈Java的23种设计模式

    - 单例模式:确保一个类只有一个实例,并提供全局访问点。 - 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 - 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定...

    设计模式浅谈24种.ppt

    在《设计模式浅谈24种》中,主要讨论了24种经典的GOF设计模式,这些模式被分为三大类:创建型、结构型和行为型。 创建型模式主要关注对象的创建,包括以下几个核心模式: 1. **Abstract Factory**(抽象工厂)模式...

    浅谈OOP之uml设计模式

    例如,单例模式在C#中可以使用`static`关键字和`lock`语句来实现线程安全的单例;工厂模式可以通过接口和抽象类定义,然后由具体的实现类完成对象的创建;装饰器模式则通过继承并添加新的行为来扩展已有类的功能。 ...

    浅谈Spring 的Controller 是单例or多例

    由于单例模式的特性,Controller的实例在系统启动后被创建,然后在每次请求时被共享,因此在定义Controller时应遵循一些最佳实践: 1. **避免在Controller中定义成员变量**:由于单例Controller可能会被多个线程...

    C#面向对象设计模式纵横谈 12种设计模式

    本篇将深入探讨12种核心的设计模式,它们是:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式、适配器模式、装饰器模式、代理模式、桥接模式、组合模式、享元模式和观察者模式。 1. **单例模式**:确保一...

    浅谈spring中用到的设计模式及应用场景

    浅谈Spring中用到的设计模式及应用场景 Spring 框架是 Java 企业级应用程序的核心组件之一,它提供了强大的功能和灵活的架构来简化企业级应用程序的开发。Spring 框架使用了多种设计模式来实现其功能,本文将对 ...

    C#面向对象设计模式纵横谈-创建型模式

    单例模式常用于配置文件管理、线程池或数据库连接等场景,确保在整个应用程序中只有一个共享的实体。 2. **工厂模式(Factory Method)** 工厂模式定义了一个用于创建对象的接口,但让子类决定实例化哪一个类。它...

Global site tag (gtag.js) - Google Analytics