图片生成器手机版 生成器模式
JAVA
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
模式实验报告
--------基于生成器模式的日历牌程序
学号:
姓名:
一:设计要求
中国的日历牌是每个星期的第一天是星期一,最后一天是星期日,欧美的日历牌是每个星期的第一天是星期日,最后一天是星期六.要求使用生成器模式为用户提供中国式和欧美式的日历牌.
二:试验环境
Pc一台 ,windows xp操作系统,jdk1.6环境,myeclipes软件
三:设计实现:
类图如下所示
:
1
关键代码及注释:
Director.java
public class Director{ //指挥者角色类
private Builder builder;
int year,month; //定义年月
Director(Builder builder,int year,int month){
this.builder=builder;
this.year=year;
this.month=month;
}
public void constructProduct(){
boolean ok=false;
ok=builder.buildWeekTitle();
if(ok){
ok=builder.buildCalendar(year,month);
}
if(ok){
builder.buildTitle();
builder.buildDayOfMonth();
}
if(ok){
CalendarProduct prodcut=builder.getCalendarProduct();
2
prodcut.showCalendarPad();
}
}
}
ChineseCalnederBuilder.java
import java.util.Calendar;
public class ChineseCalnederBuilder implements Builder{
private CalendarProduct product;
ChineseCalnederBuilder(){
product=new CalendarProduct();
}
public void buildTitle(){
product.title=product.year+”年”+product.month+”月的日历牌”;
}
public boolean buildWeekTitle(){
String [] s={“一”,”二”,”三”,”四”,”五”,”六”,”日”};
product.weekTitle=s;
if(s.length==7)
return true;
else
return false;
3
}
public boolean buildCalendar(int year,int month){
product.year=year;
product.month=month;
if(month>=1&&monthproduct.calendar=Calendar.getInstance();
product.calendar.set(year,month-1,1);
return true;
}
else
return false;
}
public void buildDayOfMonth(){ //创建一个月中天数的
算法
int
isWeekDay=product.calendar.get(Calendar.DAY_OF_WEEK)-1;
int day=0;
int m=product.month;
int y=product.year;
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
day=31;
4
if(m==4||m==6||m==9||m==11)
day=30;
if(m==2)
if(((y%4==0)&&(y%100!=0))||(y%400==0))
day=29;
else
day=28;
int nextDay=1;
String [][] a=new String[6][7];
for(int i=0;ifor(int j=0;ja[i][j]=““;
for(int k=0;kif(k==0)
for(int j=isWeekDay-1;ja[k][j]=““+nextDay ;
nextDay++;
}
else
for(int j=0;ja[k][j]=““+nextDay ;
nextDay++;
}
}
product.dayOfMonth=a;
}
public CalendarProduct getCalendarProduct(){
5
return product;
}
}
CalendarProduct.java
import java.util.Calendar;
import javax.swing.*;
public class CalendarProduct{ //产品角色类
Calendar calendar;
String title; //日历牌的标题
String [] weekTitle; //日历牌的星期标题
String [][] dayOfMonth; //用来存放一个月中的号码的
数组
int year=2008,month=1;
public void showCalendarPad(){
JTable table;
table=new JTable(dayOfMonth,weekTitle);
JDialog dialog=new JDialog();
dialog.setTitle(title);
dialog.add(new JScrollPane(table));
dialog.setBounds(130,160,220,180);
dialog.setVisible(true); //设置可见
dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_
6
CLOSE);
}
}
builder.java
public interface Builder{ //抽象生成器角色类
public abstract void buildTitle();
public abstract boolean buildWeekTitle();
public abstract boolean buildCalendar(int year,int month);
public abstract void buildDayOfMonth();
public abstract CalendarProduct getCalendarProduct();
}
四:实验结果截图:
五:实验分析
适合生成器模式使用的场景:
当系统为用户提供一个内部结构复杂的对象。把那个且构
造
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
中编写创建该对象的代码无法满足用户需求的时候,
就可以使用生成器模式来构建这样的对象。
当某些系统要求对象的构造过程必须独立于创建该对象的
类时可以使用生成器模式。
生成器模式的优点:
生成器模式的对象的构造过程封装在具体声称其中,用户
7
使用不同的具体生成器就可以的得到该对象的不同
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示。
生成器模式将对象的构造过程从创建该对象的类中分离出来,使用户无需了解该对象的具体组建。
可以更加精细有效地控制对象的生成过程,生成器将对象的生成过程分解为若干步骤。这就是程序更加精细没有效地控制整个对象的构造。
生成器模式将对象的构造过程与创建该对象解耦,是对象的创建更加灵活有弹性。 当增加新的具体生成器时,不必修改指挥着的代码,即该模式满足开闭原则。
百度搜索“就爱阅读”,专业资料,生活学习,尽在就爱阅读网92to.com,您的在线图书馆
8