zoukankan      html  css  js  c++  java
  • JAVA设计模式《二》

      上一篇为大家介绍了一下设计模式中的责任链模式,本篇为大家介绍一下关于设计模式中的单例模式与模板方法模式。单例模式的作用在于,保证应用中某个实例有且只有一个,单例模式又被分为:饱汉模式与饿汉模式,两者的区别在于饿汉模式没有显式给出对象的实例话。下面我们就一起先了解一下单例模式的中的饱汉模式和饿汉模式。

     1、饱汉模式:

      在我们创建对象时一般JAVA会默认为我们提供一个默认的构造方法,单例模式既然要保证程序中某个对象只有一个实例化,所以我们要把我们的构造方法定义为:private私有的,那我们在程序中如何获得该对象呢?这是我们对外提供一个获得该对象实例的方法,当外部需要获得实例对象时,通过类调用该方法获得。

    /*
     * 单例模式---饱汉模式
     * 保证整个应用程序中某个实例有且只能有一个
     */
    public class One {
        
        //第一步定义一个无参构造方法,私有化,不允许外部直接创建对象
        private One(){
        }
        
        //定义一个One对象
        private static One one = new One();
        
        //提供一个外部调用对象的方法,通过static将该方法定义为全局方法
        public static One getOne(){
            return one;
        }
        
    }

     2、饿汉模式:

      饿汉模式的思想和饱汉模式基本相同,只不过饿汉模式没有提供显式的对象实例。

    /*
     * 单例模式---懒 汉模式
     * 单例模式的作用:保证整个应用程序中某个实例有且只能有一个
     */
    public class Two {
        
        //第一步定义一个无参构造方法,私有化,不允许外部直接创建对象
        private Two(){
        }
        
        //声明一个Two对象
        private static Two two;
        
        //提供一个外部调用对象的方法,通过static将该方法定义为全局方法
        public static Two getTwo(){
            if(two==null){
                two = new Two();
            }
            return two;
        }
    }

     3、测试:

    public class Test {
    
        /**
         * @param 模式测试
         */
        public static void main(String[] args) {
            
            //饱汉模式
            One one1 = One.getOne();
            One one2 = One.getOne();
            if(one1==one2){
                System.out.println("两个对象一致");
            }else{
                System.out.println("两个对象不一致");
            }
            
            //饿汉模式
            Two two1 = Two.getTwo();
            Two two2 = Two.getTwo();
            if(two1==two2){
                System.out.println("两个对象一致");
            }else{
                System.out.println("两个对象不一致");
            }
            
        }
    
    }

      结果:

      


      下面我们一起来学习一下,关于模板方法模式的知识,模板方法模式就如同我们在设计建筑时,我们在保持传统设计工艺的基础上,对一些地方进行设计创新,最终达到我们理想的设计效果。

      如何为大家介绍呢?下面我们就以一个饮料机为原型为大家介绍一下模板方法模式。假定我们的饮料机可以出两种饮料:一种咖啡,另一中绿茶,这两种饮料都有提神的功效,是程序猿的必备。哈哈,这是你拿这杯子来到饮料机前,点击我要一杯咖啡,这是饮料机就为您提供一杯咖啡;当你点击我要一杯绿茶时,饮料机就为我们提供了一杯绿茶。这是怎么一回事呢?下面我们用代码实现一下:

     1、创建一个饮料机类:

    /*
     * 模板方法模式
     */
    public abstract class Robot {
        public void ZhuShui(){
            System.out.println("把水煮沸");
        }
        public abstract void Chong();
        public void DaoShui(){
            System.out.println("把饮料倒入杯子中");
        }
        public abstract void Add();
    }

     2、创建一个咖啡机类:

    public class Coffer extends Robot {
    
        public void Add() {
            System.out.println("加牛奶");
        }
    
        public void Chong() {
            System.out.println("冲咖啡");
        }
    
    }

     3、创建一个绿茶机类:

    public class Tea extends Robot {
    
        public void Add() {
            System.out.println("加柠檬");
        }
    
        public void Chong() {
            System.out.println("冲泡茶叶");
        }
    
    }

     4、测试代码:

    public class Test {
    
        /**
         * @param 模板方法模式测试
         */
        public static void main(String[] args) {
            Robot robot1 = new Coffer();
            robot1.ZhuShui();
            robot1.Chong();
            robot1.DaoShui();
            robot1.Add();
            
            System.out.println("**********************");
            
            Robot robot2 = new Tea();
            robot2.ZhuShui();
            robot2.Chong();
            robot2.DaoShui();
            robot2.Add();
                
        }
    
    }

      测试结果:

      

      Ok到这里关于JAVA中模式的单例模式和模板方法模式就为大家介绍完毕。下一篇:适配器模式与工厂方法模式

      

  • 相关阅读:
    利用密钥通过ssh互访
    rsync参数及通信
    cacti 安装
    地区排名脚本 一千三百多行代码
    调用分隔符的数组。
    select case when
    jquery 设置select 默认值
    常见的分析函数
    oracle分析函数 之分组累加求和
    ORACLE的表被 另一个用户锁定,如何解除..
  • 原文地址:https://www.cnblogs.com/AndroidJotting/p/4355433.html
Copyright © 2011-2022 走看看