一、引子
今天学到抽象工厂模式,总想着用个生活中的例子来举个例子,又不想用网上的那些。刚好最近经常旷课,被点了几次名。那就用老师点名这件事来写吧.
二、类图如下:
老师通过指定即将要上的是前两节课还是后两节课来获取上课的学生的名单;这样老师就完全不需要知道上他的课是哪个班的学生了。
三、代码如下:
/*********抽象产品角色**********/
/*电气班类的接口*/
interface DianQiBan{
publicString getStudentName();
}
/*电信班类的接口*/
interfaceDianXinBan{
publicString getStudentName();
}
/*******END抽象产品角色*******/
/******************具体产品角色*****************/
/*电气班的具体实现*/
class DianQi1Banimplements DianQiBan {
privateString name="DQ1-1,DQ1-2,DQ1-3,DQ1-4,DQ1-5,DQ1-6,DQ1-7,DQ1-8";
publicString getStudentName(){
returnthis.name;
}
}
class DianQi2Banimplements DianQiBan{
privateString name = "DQ2-1,DQ2-2,DQ2-3,DQ2-4,DQ2-5,DQ2-6,DQ2-7,DQ2-8";
publicString getStudentName(){
returnthis.name;
}
}
/*电信班的具体实现,充当具体产品角色*/
class DianXin1Banimplements DianXinBan {
privateString name="DX1-1,DX1-2,DX1-3,DX1-4,DX1-5,DX1-6,DX1-7,DX1-8";
publicString getStudentName(){
returnthis.name;
}
}
class DianXin2Banimplements DianXinBan{
privateString name = "DX2-1,DX2-2,DX2-3,DX2-4,DX2-5,DX2-6,DX2-7,DX2-8";
publicString getStudentName(){
returnthis.name;
}
}
/******************END具体产品角色************/
/*********抽象工厂角色(核心部分)*************/
/*老师上课课段接口*/
interface ShangKe{
publicString getStudentName();
}
/*************END抽象工厂角色****************/
/****************具体工厂角色*****************/
/*老师上课课段接口具体实现,具体工厂角色*/
class CheckShangkeimplements ShangKe{
privateString name1;
privateString name2;
publicCheckShangke(int type){
if(type== 0){
name1= new DianQi1Ban().getStudentName();
name2= new DianXin1Ban().getStudentName();
}else {
name1= new DianQi2Ban().getStudentName();
name2= new DianXin2Ban().getStudentName();
}
}
publicString getStudentName(){
return(name1+","+name2);
}
}
/**************END具体工厂角色**************/
/*客户测试程序*/
public classAbstractFactory{
privatestatic String name;
publicstatic void main(String[] args){
ShangKeshangke = new CheckShangke(1);
name= shangke.getStudentName();
System.out.println("此次上课人员名单:"+name);
shangke= new CheckShangke(0);
name= shangke.getStudentName();
System.out.println("此次上课人员名单:"+name);
}
}