精华内容
下载资源
问答
  • java单例模式例子

    2011-11-07 21:37:05
    在应用这个模式时,单例对象的必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置...
     
    

    单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。

    实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。

    单例模式在多线程的应用场合下必须小心使用。如果当唯一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在,从而同时各自创建了一个实例,这样就有两个实例被构造出来,从而违反了单例模式中实例唯一的原则。 解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁(虽然这样会降低效率)。

    通常单例模式在Java语言中,有两种构建方式:

    • 懒汉方式。指全局的单例实例在第一次被使用时构建。
    • 饿汉方式。指全局的单例实例在类装载时构建。

    Java编程语言中,单例模式(饿汉模式)应用的例子如下述代码所示:

      public class Singleton {
     private static Singleton INSTANCE = new Singleton();
        // Private constructor suppresses 
        // default public constructor
        private Singleton() {}
     
        public static Singleton getInstance() {
            return INSTANCE;
        }
      }
    

    Java编程语言中,单例模式(懒汉模式)应用的例子如下述代码所示:

      public class Singleton {
        private static Singleton INSTANCE = null;
     
        // Private constructor suppresses 
        // default public constructor
        private Singleton() {}
     
        public static synchronized Singleton getInstance() {
            if(INSTANCE == null){
            INSTANCE = new Singleton(); 
            }
            return INSTANCE;
        }
      }
    

    C++编程语言中,单例模式应用的例子如下述代码所示(这里仅仅提供一个示例,这个例子对多线程的情况并不是安全的):

      template<typename T> class Singleton {
     
      public:
        static T& Instance()
        {
          static T theSingleInstance; //assumes T has a default constructor
          return theSingleInstance;
        }
      };
     
      class OnlyOne : public Singleton<OnlyOne> {
     
        private:
          OnlyOne(){}
          OnlyOne(OnlyOne& rhs){}
          friend class Singleton<OnlyOne>; 
     
          //..rest of interface defined here
      };
    
    展开全文
  • 这两个使用起来非常方便,可以完成我们对定时器的绝大多数需求Timer是用来执行任务的,它接受一个TimerTask做参数Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data)...

    这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需求

    Timer类是用来执行任务的类,它接受一个TimerTask做参数

    Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后(int delay).这两种方式都可以指定任务执行的频率

    TimerTest.Java:

    package com.cn;

    import java.io.IOException;

    import java.util.Timer;

    public class TimerTest{

    public static void main(String[] args){

    Timer timer = new Timer();

    timer.schedule(new MyTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒执行一次,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.

    while(true){//这个是用来停止此任务的,否则就一直循环执行此任务

    try{

    int in = System.in.read();

    if(in == 's'){

    timer.cancel();//使用这个方法退出任务

    break;

    }

    } catch (IOException e){

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    static class MyTask extends java.util.TimerTask{

    public void run(){

    System.out.println("________");

    }

    }

    }

    此类运行时:

    程序启动1秒后在控制台打印“————”

    间隔两秒后接着执行MyTask的run()方法,打印“————”

    这样一直循环

    当在控制台输入s字符时,timer定时器取消工作

    跳出整个循环

    程序运行结束!

    TimerTest2.java:

    package com.cn;

    import java.io.IOException;

    import java.util.Date;

    import java.util.Timer;

    public class TimerTest2{

    public static void main(String[] args){

    Timer timer = new Timer();

    MyTask myTask1 = new MyTask();

    MyTask myTask2 = new MyTask();

    myTask2.setInfo("myTask-info-2");

    timer.schedule(myTask1, 1000, 2000); //任务1 一秒钟后执行,每两秒执行一次。

    timer.scheduleAtFixedRate(myTask2, 2000, 3000); //任务2 2秒后开始进行重复的固定速率执行(3秒钟重复一次)

    while (true){

    try{

    //用来接收键盘输入的字符串

    byte[] info = new byte[1024];

    int len = System.in.read(info);

    String strInfo = new String(info, 0, len, "GBK");//从控制台读出信息

    if (strInfo.charAt(strInfo.length() - 1) == ' '){

    strInfo = strInfo.substring(0, strInfo.length() - 2);

    }

    if (strInfo.startsWith("Cancel-1")){

    myTask1.cancel();//退出任务1

    // 其实应该在这里判断myTask2是否也退出了,是的话就应该break.但是因为无法在包外得到

    // myTask2的状态,所以,这里不能做出是否退出循环的判断.

    } else if (strInfo.startsWith("Cancel-2")){

    myTask2.cancel(); //退出任务2

    } else if (strInfo.startsWith("Cancel-All")){

    timer.cancel();//退出Timer

    break;

    } else{

    // 只对myTask1作出判断,偷个懒^_^

    myTask1.setInfo(strInfo);

    }

    } catch (IOException e){

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    static class MyTask extends java.util.TimerTask{

    String info = "INFO";

    @Override

    public void run(){

    // TODO Auto-generated method stub

    System.out.println(new Date() + " " + info);

    }

    public String getInfo(){

    return info;

    }

    public void setInfo(String info){

    this.info = info;

    }

    }

    }

    此类创建了两个定时任务mytask1和mytask2

    mytask1任务和上面的TimerTest类中的例子用法一样。即安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。

    mytask2任务就不同于上面的用法了,timer.scheduleAtFixedRate它是用的timer定时器的scheduleAtFixedRate()方法来执行。

    scheduleAtFixedRate()方法在API1.6.0中是这样定义的:

    安排指定的任务在指定的时间开始进行重复的固定速率执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。

    近似固定的时间间隔的意思是说:在固定速率执行中,相对于已安排的初始执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则将快速连续地出现两次或更多次执行,从而使后续执行能够赶上来。

    Timer类的常用其他方法:

    cancel()

    终止此计时器,丢弃所有当前已安排的任务。

    purge()

    从此计时器的任务队列中移除所有已取消的任务。

    schedule(TimerTask task, Date time)

    安排在指定的时间执行指定的任务。

    TimerTask类的常用其他方法:

    cancel()

    取消此计时器任务。

    run()

    此计时器任务要执行的操作。

    scheduledExecutionTime()

    返回此任务最近实际 执行的已安排 执行时间。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 单例设计模式  解决的问题:就是可以保证一个在内存中的对象唯一性。 必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。 如何保证对象唯一性呢? 1,不允许其他程序用new创建该对象。 2...

    单例设计模式
        解决的问题:就是可以保证一个类在内存中的对象唯一性。

    必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。

    如何保证对象唯一性呢?
    1,不允许其他程序用new创建该类对象。
    2,在该类创建一个本类实例。
    3,对外提供一个方法让其他程序可以获取该对象。

    步骤:
    1,私有化该类构造函数。
    2,通过new在本类中创建一个本类对象。
    3,定义一个公有的方法,将创建的对象返回。

    */

    //饿汉式
    class Single//类一加载,对象就已经存在了。
    {
        private static Single s = new Single();

        private Single(){}

        public static Single getInstance()
        {
            return s;
        }
    }


    //懒汉式
    class Single2//类加载进来,没有对象,只有调用了getInstance方法时,才会创建对象。
                //延迟加载形式。 
    {
        private static Single2 s = null;

        private Single2(){}

        public static Single2 getInstance()
        {
            if(s==null)
                s = new Single2();
            return s;
        }
    }

    展开全文
  • 例子中用到了策略模式、简单工厂加反射,并且将运算符号常量一键值对的形式放在了配置文件中,分别对应不同的算法名称。 那么在工厂中怎样读取到配置文件中对应的常量呢? 下面将提供三个方法: 一、基于...

    工具:idea
    jdk:1.8

    缘由:一下午在实现一个计算器的小栗子,最终目的是将一切常量封装,对应算法抽离,实现高内聚低耦合效果。例子中用到了策略模式、简单工厂加反射,并且将运算符号常量一键值对的形式放在了配置文件中,分别对应不同的算法类名称。
    在这里插入图片描述
    那么在工厂中怎样读取到配置文件中对应的常量呢?
    下面将提供三个方法:

    一、基于InputStream读取配置文件信息

     public static CounterInterface counterInterface(String key) throws Exception {
    		// 创建Properties对象,用于读取配置文件
    		Properties props = new Properties();
    		
    		//我这里用的是绝对路径,相对路径找不到配置文件,不清楚什么原因
    		//或者可以用InputStream ips = counterInterface.class.getClassLoader().getResourceAsStream(文件路径)
            InputStream ips = new FileInputStream("D:\\allproject\\Counter\\src\\main\\resources\\config.properties");
    
    		// 由于配置文件中可能存在中文乱码问题,应用reader类进行转换后解决
            Reader inStream = new InputStreamReader(ips, "UTF-8");
            props.load(inStream);
    
    		//getProperty用于获取properties中 对应键的键值,应用反射 ,实例化出键值对应的类 的对象
            CounterInterface counterInterface= (CounterInterface) Class.forName(props.getProperty(key)).newInstance();
            
            return counterInterface;
     }
    
    

    二、通过spring中的 PropertiesLoaderUtils工具类进行获取:

     public static CounterInterface counterInterface(String key) throws Exception {
    		Properties properties = new Properties();
            try {
                properties = PropertiesLoaderUtils.loadAllProperties("config.properties");
                String res=new String(properties.getProperty(key).getBytes("iso-8859-1"), "gbk");
            } catch (IOException e) {
                e.printStackTrace();
            }
    		//getProperty用于获取properties中 对应键的键值,应用反射 ,实例化出键值对应的类 的对象
            CounterInterface counterInterface= (CounterInterface) Class.forName(res).newInstance();
            
            return counterInterface;
     }
    

    便利取值:

    
    		Properties properties = new Properties();
            try {
                properties = PropertiesLoaderUtils.loadAllProperties("config.properties");
                //遍历取值
                Set<Object> objects = properties.keySet();
                for (Object object : objects) {
                    System.out.println(new String(properties.getProperty((String) object).getBytes("iso-8859-1"), "gbk"));
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
     
    

    三、通过 java.util.ResourceBundle 类读取:

     private static void readProperty3() {
            ResourceBundle resourceBundle = ResourceBundle.getBundle("code");
            //遍历取值
            Enumeration enumeration = resourceBundle.getKeys();
            while (enumeration.hasMoreElements()) {
                try {
                    String value = resourceBundle.getString((String) enumeration.nextElement());
                    System.out.println(new String(value.getBytes("iso-8859-1"), "gbk"));
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
        }
    
    

    参考博客链接

    展开全文
  • 装饰器模式是指允许对...以下举一个电脑配置例子说明。首先创建一个电脑的接口,给出两个抽象方法,分别是获取名字和获取价格:/***抽象电脑*@author樱桃肉丸子*/publicinterfaceAbstractComputer{Stringname()...
  • 所谓设计模式,就是一套反复会他人使用,...饿汉模式:饿汉模式我们可以通过私有的构造方法去实现,这样可以防止外界通过构造方法去创建多个实例,我们可以在中创建构造方法的唯一实例,下面看具体例子:publ...
  • Java与设计模式-抽象工厂模式

    千次阅读 2016-03-07 19:02:38
    例如某电脑厂商要生产电脑,也就是电脑这个产品确定,而电脑配置不确定,这种情况可以用抽象工厂模式来解决。类图如图所示:代码实现完全结合UML类图,结合图就可以完成系统创建。本实例里是抽象ComputerFa
  • 指一个只有一个实例,且该能自行创建这个实例的一种模式。 二、单例模式的常见例子 Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的...
  • 装饰器模式是指允许对一个现有的...以下举一个电脑配置例子说明。首先创建一个电脑的接口,给出两个抽象方法,分别是获取名字和获取价格:/** *抽象电脑 *@author樱桃肉丸子 */ publicinterfaceAbstractCompu...
  • 通过电视机这个生活中的例子,理解简单工厂设计模式 : 测试Test.java: public static void main(String[] args) throws Exception { //直接访问 // TV tv = TVFactory.produceTV("Haier"); // tv.display(); ...
  • Java代理模式

    2011-11-20 22:41:27
    那电脑来做例子 把公共的特有的方法提出来,定义成一个interface public interface ComputerDAO { public void usb();//USB接口的个数 public void price();//电脑价格 public void brand();//电脑型号 } ...
  • JAVA常见的设计模式

    2018-08-29 17:22:23
    一句话总结:一个Java虚拟机中只有一个对象,并提供一个全局访问点。 生活中例子:太阳、月亮、国家主席等。 解决什么问题:对象的唯一性,性能浪费太多。 项目里面怎么用:数据库连接对象,属性配置文件的...
  • 这里给出一个读取属性(properties) 文件的单例,作为单例模式的一个实用的例子。属性文件如同老式的视窗编程时的.ini 文件,用于存放系统的配置信息。配置信息在属性文件中以属性的方式存放,一个属性就是两个...
  • 利用RemtoeObject模式Java交互,给人的感觉就像是dwr来与Java交互一致,2者具有很大的相似性,比如说:都是一种前台调用后台模式,调用的都是普通后台,都需要配置普通后台的路径,等。例子:检查用户名...
  • java单例模式小阐述

    2011-04-06 21:35:00
    众所周知,单例模式适合于一个只有一个实例的情况,比如窗口管理器,打印缓冲池和文件系统,它们都是原型的例子。典型的情况是,那些对象的类型被遍及一个软件系统的不同对象访问。下面的代码为我们介绍了单例模式...
  • 概念:单例模式确保某一个只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式只应在有真正的“单一实例”的需求时才可使用 场景:读取配置文件、Socket链接、数据库资源等   例子: public ...
  • 一句话总结:一个Java虚拟机中只有一个对象,并提供一个全局访问点。 生活中例子:太阳、月亮、国家主席等。 解决什么问题:对象的唯一性,性能浪费太多。 项目里面怎么用:数据库连接对象,属性配置文件的...
  • 通过对配置文件进行读写的例子,演示了如何应用单例模式来设计及其之间的关系。
  • java模式》笔记(十一) 单例模式

    千次阅读 2006-09-05 12:33:00
    § 15.1 引言☆ 一些资源管理器常常设计为单例模式,比如打印管理器、传真管理器、通讯端口管理器或者一些管理内部资源如配置文件管理器等。☆ Windows的回收站是一个很好的单例的实际例子。§ 15.2 单例模式的结构...
  • (如多个代码块需要读取配置文件,or开启事务,orjdbc读取数据源就是个经典例子)参考:吟啸且徐行  实现步骤: 私有构造方法。保证唯一的 创建私有的静态的本的对象 定义共有静态方法,返回该对象。 /**...
  • 必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性. 如何保证对象唯一性呢? 1.不允许其他程序用new创建该对象. 2.在该创建一个本实例. 3.对外提供一个方法让其他程序可以获取该对象. ...
  • 其中,可以使用枚举类型方式实现单例设计模式,但是实现的例子比较简单,本文将通过枚举单例,实现如何同时读取xml、properties属性配置文件。在回味枚举单例的使用同时,介绍一些属性配置文件的使用方式。1、代码...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     Java二进制IO与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
  • 首先我们得先定义一个责任链模式:  责任链模式是一种线性执行流程... 典型例子就是Tomcat中的过滤器,当配置了多个过滤器时,就会形成一条过滤链,客户端发起 的请求会经过这条过滤链上的每一个过滤器,最终只...
  • 比如:数据库连接池,系统参数配置Java API 中的 Runtime, Calendar ...如何实现这种需求成为一个值得讨论的问题。以往的做法,是在程序的某个里面(比如是 GlobalObject )建立一个这个此种类的实例,...
  • java jdbc 连接数据库

    2012-07-03 16:10:22
    需手动导入驱动包mysql-connector-java-5.0.4-bin.jar 本例子的包路经是F:\workspace\mysql_driver\mysql-connector-java-5.0.4-bin.jar 读者可以自己更改包路径! 配置方法: JdbcSingleUtils.java 是单利模式创建...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
     Java二进制IO与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 323
精华内容 129
热门标签
关键字:

java配置类模式例子

java 订阅