一、学习目的
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。它可以保证唯一的实例。单例模式因为是唯一实例,这样它可以严格地控制用户怎样访问它以及何时访问它。简单地说就是对唯一实例的受控访问。
二、学习内容
1,如何实现单列设计模式
(1)将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。确保实例的唯一性
(2)在该类内部创建一个唯一的实例化对象,并且将其封装为private static类型。
(3)定义一个静态方法返回这个唯一实例对象
2,单列设计模式的两种实现方式
(1)“饿汉模式” 静态初始化的方式是在自己被加载时就将自己实例化,所以被形象地称之为饿汉式单例模式
class Poker{
//default,shareInstance,manager
//2,定义一个静态成员变量 记录这个单列对象
//恶汉
public static final Poker shared = new Poker();
//私有化构造函数
private Poker(){}
// 静态方法返回该实例
public static Poker getInstance() {
return shared;
}
优点:实现起来简单,没有多线程同步问题
缺点:耗费内存
(2)“懒汉模式”要在第一次被引用时,才会将自己实例化,所以就被称为懒汉式单例模式。
class Player{
public int count;
//1,私有化2,创建静态变量
public static Player shared = null;
//私有化构造方法
private Player(){}
public static Player getInstance(){
if (shared == null) {
//如果没有创建 那么久创建一个
shared = new Player();
}
return shared;
}
}
优点:节约内存
缺点:在多线程环境中,这种实现方法是错误的,不能保证单例的状
(3)如何解决“懒汉模式”多线程的问题?
可以给进程一把锁来处理。synchronized是确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。
class Player{
public int count;
//1,私有化2,创建静态变量
public static Player shared = null;
//私有化构造方法
private Player(){}
public static Player getInstance(){
Object b = new Object();
synchronized (b) {
if (shared == null) {
//如果没有创建 那么久创建一个
shared = new Player();
}
}
return shared;
}
}
2,ArrayList线性表
1,线性表:另个或多个具有相同类型的数据元素的有限序列。
2,ArraysLis
ArrayList persons = new ArrayList();
线性表 , 里面是泛型 表里面只能存放Person类的对象
3,数组里面保存的的都是对象的引用(指针)
注意:改变数组里面对象的属 ,原始对象的值也跟着改变,因为大家都是指向同一个内存空间
4,获取数组的大小
//获取数组元素个数
persons.size();
5,向数组里面添加元素
//添加对象
Person xw = new Person();
persons.add(xw);
6,访问数据
//访问数据
Person xw2 = persons.get(0);
xw2.name = "xiaowang";
System.out.print(xw2.name);
3,打印类的对象
当打印一个对象的时候 就会默认去调用对象的toString方法,如果当前类里面没有实现这个方法 就会到父类里面去查找,Object(所有类都继承Object类) 里面的默认实现就是打印这个对象的首地址
@Override
public String toString() {
String pkString ="";
if(poker != null)
pkString = poker.getDot()+poker.getType().getPic();
}
return id+"号玩家"+name+"筹码"+money;
}
三、学习感悟
今天的主要任务是写一个扑克牌游戏,一个比较难的项目,给我的感觉就是非常复杂,跟着老师写的时候逻辑思维有点跟不上老师的节奏,让人怀疑人生。写完之后再去分析感觉有那么点明白但是又觉得明白的不透彻,我觉得最重要的原因是在这方面练习的太少了,所以才会有那种似是而非的感觉。