策略模式,单例模式

作者: 新金沙平台  发布:2019-10-05

n个妙计,一个锦囊。

说到程序怎么能离得开数据呢。这篇文章和接下来几篇文章讲讲Java中数据的存储方式。首先要明白常量和变量的概念。

三个要素

妙计接口
public interface IStrategy{ public void operate(); }

任何一个“字面值”都是常量。例如数字1、1024,3.14,字母'a',符号'@',单词"hello",汉字“我”,句子"are you ok",布尔值true都是常量。常量按类型划分为

1、私有的构造方法
具体妙计实现类
public class Strategy1 implements IStrategy{ @Override public void operate(){ System.out.println; } } public class Strategy2 implements IStrategy{ @Override public void operate(){ System.out.println; } }

图片 1

2、指向自身的静态实例引用
一个锦囊,通过锦囊取出具体妙计,并使用。
public class Context{ private IStrategy strategy; public Context(IStrategy strategy){ this.strategy = strategy; } public void operate(){ this.strategy.operate(); } }

这里有个问题,编译器是怎么知道一个值到底是什么类型的常量呢?例如1024到底是个整型还是个字符串?答案是根据这个值在代码里有没有用单引号'或者双引号"包起来。数值型常量和逻辑常量不需要用引号包起来。逻辑常量只有true和false两个,数值型根据有无小数点再分为整型和实型。而用单引号包起来的是字符型,用双引号包起来的是字符串。例如1024是整型,而"1024"是字符串,'@'是字符,而"@"是字符串。

3、公有的静态的获取自身实例方法

当程序运行时,数据是临时存储在内存中的。每个数据都需要在内存划出一块区域,而这一块一块的内存区域,称为变量。所以当你看到变量这个词时,要联想到的不是一个数字或者一个字符,而是一块内存区域。变量有三个属性,<code>变量名</code>,<code>数据类型</code>和<code>作用域</code>。通过变量名来访问这块内存区域,数据类型包含了这块内存区域可以存储什么类型的数据和内存大小这两个信息,而作用域指的是代码中哪部分可以访问这块内存区域。Java是一门强类型的语言。所谓强类型指的是每个变量或者说你在内存开辟每块数据区域必须先确定数据类型,确定了之后只能存储这个类型的数据。Java中数据类型按存储方式可以分为<code>基础属性类型</code>和<code>引用数据类型</code>两种。其中基础数据类型有八种,如下图。而引用数据类型因为可以自定义也就是说有无限种,其中字符串String就是一种引用数据类型。

饿汉式

public class Singleton{ private static Singleton singleton = new Singleton(); private Singleton(){}; public static Singleton getInstance(){ return singleton; } }

图片 2

懒汉式

public class Singleton{ private static Singleton singleton; private Singleton(){}; public static Singleton getInstance(){ if(singleton==null){ singleton = new Singleton(); } return singleton; } }

但是以上方式在多线程环境下会出现问题,可能会new出来多个实例。固需加锁,但是直接在方法上加synchronized关键字,每次获取实例都会加锁,而事实上只需在创建实例的时候才需加锁。故将getInstance方法改成如下:

public static Singleton getInstance() { if (singleton== null) { synchronized (singleton) { if (singleton== null) { singleton= new Singleton(); } } } return singleton; }

当然也可以将创建实例的过程与获取实例的过程分开。

现在我们先来看看基础数据类型中的数值型。也就是整数型:byte、short、int、long和实数型:float、double。他们都是用于表示数字,区别是所占用的字节数和表示范围不同,具体如下表。

图片 3

上表已经很直观的说明了6种数值型变量的区别,这里就不再赘述。这里需要讲的是变量的使用方法。

变量的使用方法是先声明后初始化。声明方法是:<code>数据类型 变量名;</code>例如:

byte b;short s;int i;long l;float f;double d;

本文由新金沙平台发布于新金沙平台,转载请注明出处:策略模式,单例模式

关键词: 新金沙平台

上一篇:容易被忽略的问题,安迪的第一个字典
下一篇:没有了