目的
学习了解单例设计模式的相关知识,并在前几天Java学习的基础上,完善所学的知识,完成扑克牌比大小的游戏,能实现的功能有,游戏显示页面,玩家信息页面(包括玩家姓名 编号 所持有的资金),生成一副扑克牌并随机发给玩家一张,玩家可选择弃牌,下注,跟注,具体功能可自己完善。
基础饿汉式单例设计模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
优点:
类加载时就去初始化,没有线程安全问题,不能通过new创建实例
缺点:
类加载时就创建好对象,可能会创建出来用不到的实例对象,这样对内存是种浪费
代码示例
public class Text {
public static void main(String[] args){
//1.正常情况下创建一个对象
Poker.shared.text();
}
}
class Poker{
//default sharedInstance,manager
//2.定义一个静态的成员变量 记录这个单例对象
//饿汉式
public static final Poker shared = new Poker();
//1.默认构造函数
private Poker(){}
public void text(){
}
扑克牌游戏
实现步骤
理清楚逻辑结构和大致需要的功能
结构图
封装游戏开始界面
创建一个Utils类,在里面封装所需要的输入语句。包括是否输入星号和换行
public class Utils {
//如果不需要保存数据 没有成员变量
//提供静态方法 访问方便
public static void showText(boolean hasStar,boolean lineBreak,String... contents){
//判断是否需要分隔符
System.out.print(hasStar?"**********************\n":"");
//判断输出的内容是多行还是一行
if(contents.length == 1){
System.out.print(contents[0]);
//有分割线的时候要进行换行
System.out.print(hasStar?"\n":"");
}else {
//输出带编号的多行数据
for(int i = 0;i < contents.length; i++){
System.out.println((i+1)+". "+contents[i]);
}
}
System.out.print(hasStar?"**********************\n":"");
//判断是否需要换行
System.out.print(lineBreak?"\n":"");
}
}
创建Poker类
Poker类用于定义牌的点数和类型
定义一个Constant类(常量类,用于保存常量 数字 花色,人数等等常数 )
public class Constant {
//用数组保存牌的点数
public static final String[] DOTS = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
//保存固定的几个花色
public static final PokerType[] TYPES = {PokerType.SPADES,PokerType.HEARTS,PokerType.CLUBS,PokerType.DIAMANDS};
//保存默认的玩家姓名
public static final String[] DEFAULT_NAMES = {"刘德华","周润发","张家辉","周星驰"};
//默认的资金
public static fin