单例设计模式
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。
如何实现单例设计模式
(1)将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。
(2)在该类内部产生一个唯一的实例化对象,并且将其封装为private static类型。
(3)定义一个静态方法返回这个唯一对象。
实现单例设计模式的两种形式
“饿汉式”
立即加载就是使用类的时候已经将对象创建完毕(不管以后会不会使用到该实例化对象,先创建了再说。很着急的样子,故又被称为“饿汉模式”),常见的实现办法就是直接new实例化。
class poker{
static public int i=0;
//定义一个静态成员变量,类型为poker,来记录这个对象
//因为加了final所以shared只能赋值一次,也就是说poker类的对象只能创建一个
public static final poker shared=new poker();
//构造函数私有化
private poker()
{
}
public static poker test(){
return shared;
}
}
"懒汉式"
延迟加载就是调用get()方法时实例才被创建(先不急着实例化出对象,等要用的时候才给你创建出来。不着急,故又称为“懒汉模式”),常见的实现方法就是在get方法中进行new实例化。
class player{
//构造函数私有化
private player(){
}
//实例变量私有化
private static player shared=null;
public int count=0;
public static player getInstance()
{
if (shared==null)
{
shared=new player();
}
return shared;
}
}
小程序代码
游戏规则:每人随机发一张牌然每个人和其它人依次比大小,根据每人输入的底注来判断输赢金钱的多少
主类
package Day3;
public class puk {
public static void main(String[] args)
{
Gamecenter.welocm(true);
String[] wellocm= new String[]{"看牌", "出牌", "下注"};
Gamecenter.list(wellocm);
//产生一副牌
pukerManger.creatpuker();
//看牌
pukerManger.putlist();
//洗牌
pukerManger.shuffle();
//开始游戏
pukerManger.geamBigain();
}
}
欢迎界面
package Day3;
public class Gamecenter {
public static void list(String...count)
{
for (int i=0;i<count.length;++i)
{
String[] p=count;
System.out.println(i+1+". "+p[i]);
}
}
public static void welocm(boolean t)
{
if (t)
System.out.println("***************");
System.out.println("欢迎光临扑克牌大赛!");
if (t)
System.out.println("***************");
}
}
创建牌,洗牌,发牌,比牌大小,输入底注,输出余额都在这个类里
package Day3;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class pukerManger {
static String[] puke={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
static String[] type={"♥","♠","♦","♣ "};
static pokerType[] paip=new pokerType[52];
static int i,j,k=0;
//创造一副牌
public static void creatpuker()
{
while (k!=paip.length)
{
for (i=0;i<puke.length;++i)
{
for (j=0;j<type.length;++j)
{
paip[k]=new pokerType(puke[i],type[j],i,j);
k++;
}
}
}
}
public static void putlist()
{
i=0;
while (i!=paip.length)
{
System.out.print(paip[i].typenumer+paip[i].pic+" ");
i++;
}
}
//洗牌
public static void shuffle()
{
List list= Arrays.asList(paip);
Collections.shuffle(list);
}
public static void geamBigain()
{
int beishu=5;
Scanner in=new Scanner(System.in);
Players[] wanjia=new Players[4];
int[] duzu=new int[4];
System.out.println("");
System.out.println("本场次倍数为5.");
//给玩家发牌,并让玩家下注
for (int i=0;i<4;++i)
{
wanjia[i]=new Players(paip[i].typenumer,paip[i].pic,paip[i].id,paip[i].huseid);
System.out.print("请玩家"+(i+1)+"输入底注");
duzu[i]=in.nextInt();
System.out.println("");
}
//输出每个玩家的牌
for (i=0;i<4;++i)
{
System.out.println(wanjia[i].painumer+wanjia[i].huse+" ");
}
//比较牌的大小
int m,n;
for (m=0;m<wanjia.length;++m)
{
for (n=m+1;n<wanjia.length;++n)
{
if (wanjia[m].id>wanjia[n].id)
{
wanjia[m].money=wanjia[m].money+5*duzu[n];
wanjia[n].money= wanjia[n].money-5*duzu[n];
}
else if (wanjia[m].id<wanjia[n].id)
{
wanjia[m].money=wanjia[m].money-5*duzu[m];
wanjia[n].money=wanjia[n].money+5*duzu[m];
}
else
{
if (wanjia[m].huseid>wanjia[n].huseid)
{
wanjia[m].money=wanjia[m].money+5*duzu[n];
wanjia[n].money= wanjia[n].money-5*duzu[n];
}
else
{
wanjia[m].money=wanjia[m].money-5*duzu[m];
wanjia[n].money=wanjia[n].money+5*duzu[m];
}
}
}
}
//输出玩家的余额
for (m=0;m<wanjia.length;++m)
{
System.out.println("玩家"+(m+1)+"的余额为"+wanjia[m].money);
}
}
}
玩家类
package Day3;
public class Players {
String painumer;
String huse;
int id;
int huseid;
int money=1000;
public Players(String painumer,String huse,int id,int huseid)
{
this.painumer=painumer;
this.huse=huse;
this.id=id;
this.huseid=huseid;
}
}