多例模式(Multition Pattern),即有上限的多例模式(无限制多例模式与普通调用没什么区别,这里就不来了),多例模式与单例模式类似,并不对外暴露自己的构造方法,即对外自己是不可new的。对外暴露的是一个获取实例方法,在类的内部通过静态代码块或者其他方式提前生成有限个的本类实例对象存放于本类的集合中,在获取实例方法中可以通过自己独特的处理方式从集合中取出本类的实体类。
package com.cupid.Pattern.Multition; import java.util.ArrayList; import java.util.Random; /** * 这是针对多例模式的demo * @Author: cupid * Created by Cupid520 on 2018/2/21. * @Description: 后代实体类 */ public class Offspring { //性别 :1,男;0,女 private Integer gender; //后代姓名 private String offspringName; //允许最大后代个数 private static final Integer maxOffspringCounts = 2; //后代姓名列表 private static ArrayList<String> offspringNameList = new ArrayList<>(maxOffspringCounts); //后代集合列表 private static ArrayList<Offspring> offspringPeopleList = new ArrayList<>(maxOffspringCounts); //当前选中的后代索引 private static Integer currentOffspringInde = 0; static{ for(int i = 0 ; i < maxOffspringCounts ; i ++){ offspringNameList.add(i , "后代" + i ); Offspring offspring = new Offspring(i , "后代" + i); offspringPeopleList.add(offspring); } } private Offspring(Integer gender , String offspringName){ this.gender = gender; this.offspringName = offspringName; } public Integer getGender() { return gender; } public String getOffspringName() { return offspringName; } public static Offspring getInstance(){ Random random = new Random(); Integer temp = random.nextInt(maxOffspringCounts); return offspringPeopleList.get(temp); } }
测试主类:
package com.cupid.Pattern.Multition; /** * @Author: cupid * Created by Cupid520 on 2018/2/21. * @Description: */ public class MultitionPatternTest { public static void main(String[] args) { Offspring offspring = null; //模拟二十户家庭 for(int i = 0 ; i < 20 ; i ++){ offspring = Offspring.getInstance(); System.out.println("后代性别 :" + offspring.getGender()+ " ,后代姓名 : " + offspring.getOffspringName()); } } }