第一次设计作业

第一次设计作业#

1、要求:某系统日志记录器要求支持多种日志记录方式,如文件记录、数据库记录等;用户可以根据要求动态选择日志记录方式。使用Factory模式来设计;如果系统中增加一个日志记录方式—控制台日志记录(ConsoleLog),类图将如何改变?

1.1

代码

// 日志工厂类
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后:
1.2

2、要求:某系统为了改进数据库操作的性能,自定义数据连接对象Connection和语句对象Statement,可针对不同类型的数据库提供不同的连接对象和语句对象;用户可以通过配置文件等方式根据实际需要动态更换系统数据库;使用Abstract Factory模式来设计。

2

代码

// 数据库抽象工厂类
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模式来设计。

3

代码

// 套餐导演抽象类
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模式如何设计?

4

代码

// 地图导演类
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() {}
}
posted @ 2017-11-06 20:43  孙敏铭  阅读(340)  评论(1编辑  收藏  举报