第一次设计作业#
1、要求:某系统日志记录器要求支持多种日志记录方式,如文件记录、数据库记录等;用户可以根据要求动态选择日志记录方式。使用Factory模式来设计;如果系统中增加一个日志记录方式—控制台日志记录(ConsoleLog),类图将如何改变?
代码
// 日志工厂类
public abstract class logFactory {
abstract log createLog();
}
// 文件日志工厂类
public class FilelogFactory extends logFactory {
@Override
log createlog() {
return new Filelog();
}
}
// 数据库日志工厂类
public class DBlogFactory extends logFactory {
@Override
log createlog() {
return new DBlog();
}
}
// 日志产品类
public abstract class Log {
abstract void add();
abstract void delete();
abstract void output();
}
// 文本日志产品类
public class Filelog extends log {
@Override
void add() {}
@Override
void delete() {}
@Override
void query() {}
}
// 数据库日志产品类
public class DBlog extends log {
@Override
void add() {}
@Override
void delete() {}
@Override
void query() {}
}
加入consolelog后:
2、要求:某系统为了改进数据库操作的性能,自定义数据连接对象Connection和语句对象Statement,可针对不同类型的数据库提供不同的连接对象和语句对象;用户可以通过配置文件等方式根据实际需要动态更换系统数据库;使用Abstract Factory模式来设计。
代码
// 数据库抽象工厂类
public abstract class DBFactory {
public abstract connection createonnection();
public abstract statement createstatement();
}
// MySql数据库工厂类
public class MyDBFactory extends DBFactory {
@Override
public connection createconnection() {
return new Myconnection();
}
@Override
public statement createstatement() {}
return new Mystatement();
}
}
// OracleSql数据库工厂类
public class OracleDBFactory extends DBFactory {
@Override
public connection createconnection() {
return new Oracleconnection();
}
@Override
public statement createstatement() {}
return new Oraclestatement();
}
}
// 数据库连接抽象产品类
public abstract class connection {
public abstract void connection();
}
// 数据库语句抽象产品类
public abstract class statement {
public abstract void statement();
}
// MySql数据库连接
public class Myconnection extends connection {
@Override
public void connection() {}
}
// MySql数据库语句
public class Mystatement extends statement {
@Override
public void statement() {}
}
// Oracle数据库连接
public class Oracleconnection extends connection {
@Override
public void connection() {}
}
// MySql数据库语句
public class Oraclestatement extends statement {
@Override
public void statement() {}
}
3、要求:KFC套餐是一个复杂对象,一般包括主食(如汉堡、鸡肉卷等)和饮料(如果汁、可乐等)组成部分,不同套餐有不同组成部分;KFC服务员要根据顾客要求,装配这些组成部分,构造一个完整套餐,返回给顾客;使用Builder模式来设计。
代码
// 套餐导演抽象类
public abstract class KFCDirector {
protected KFCBuilder builder;
public KFCDirector(KFCBuilder builder) {
this.builder = builder;
}
public abstract KFCcombo construct();
}
// 套餐创建者抽象类
public abstract class KFCBuilder {
protected KFCcombo combo;
public KFCBuilder() {
this.combo = new combo();
}
public combo getcombo() {
return combo;
}
public abstract void buildStaple();
public abstract void buildDrink();
}
// 套餐创建者具体类
public class ComboABuilder extends KFCBuilder {
@Override
public void buildStaple() {}
@Override
public void buildDrink() {}
}
// 套餐产品类
public class combo {
public void setstaple(){}
public void getstaple(){
return combo.staple;
}
public void setdrink(){}
public void getdrink(){
return combo.drink;
}
}
4、要求:游戏中的地图:包括天空、地面、背景;人物包括人体、服装、装备等组成部分,如采用Builder模式如何设计?
代码
// 地图导演类
public class mapDirector {
private mapBuilder builder;
public mapDirector(mapBuilder builder) {
this.builder = builder;
}
public map construct() {
builder.buildSky();
builder.buildGround();
builder.buildBackground();
return builder.getMap();
}
}
// 地图创建者抽象类
public abstract class mapBuilder {
protected Map map;
public MapBuilder() {
this.map = new Map();
}
public Map getMap() {
return map;
}
public abstract void buildsky();
public abstract void buildground();
public abstract void buildbackground();
}
// 沙漠地图创建者具体类
public class DesertMapBuilder extends MapBuilder {
@Override
public void buildsky() {}
@Override
public void buildground() {}
@Override
public void buildbackground() {}
}