实训项目一创建型模式实训
实验目标:掌握简单工厂模式,工厂方法模式,抽象工厂模式的设计方法
实验内容:
第一题:使用简单工厂模式
设计一个可以创建不同几何形状的绘图工具类(Shape),如可创建圆形(Circle),矩形(Rectangle)和三角形对象(Triangle),每个几何图形都具有绘制和擦除两个方法,要求在绘制不支持的几何图形时,抛出一个异常UnsupportedShapeException,绘制类图并编程实现。
参考类图
public class Circle implements Shape{
public void draw(){
System.out.println("Circle drawed");
}
public void erase(){
System.out.println("Circle erased");
}
}
public class Rectangle implements Shape{
public void draw(){
System.out.println("Rectangle drawed");
}
public void erase(){
System.out.println("Rectangle erased");
}
}
public interface Shape {
void draw();
void erase();
}
public class ShapeClient {
public static void main(String[] args){
Shape circle = null;
Shape rectangle = null;
Shape triangle = null;
circle = ShapeFactory.creatShape("circle");
rectangle = ShapeFactory.creatShape("rectangle");
triangle = ShapeFactory.creatShape("triangle");
circle.draw();
circle.erase();
rectangle.draw();
rectangle.erase();
triangle.draw();
triangle.erase();
}
}
public class ShapeFactory {
public static Shape creatShape(String shapeName){
if(shapeName.equals("circle")){
return new Circle();
}
else if(shapeName.equals("rectangle")){
return new Rectangle();
}
else if(shapeName.equals("triangle")){
return new Triangle();
}
return null;
}
}
public class Triangle implements Shape{
public void draw(){
System.out.println("Triangle drawed");
}
public void erase(){
System.out.println("Triangle erased");
}
}
第二题:使用工厂方法模式实现日志记录器
某日志系统要求支持多种日志记录方式,如文件日志记录(FileLog),数据库日志记录等(DatabaseLog),且用户可以根据要求动态选择日志记录方式,使用工厂方法模式设计该系统。
参考实例类图:
public class Client {
public static void main(String[] args) {
LogFactory factory;
Log log;
factory = new FileLogFactory();
log = factory.creatLog();
log.writeLog();
}
}
class DatabaseLog implements Log{
public void writeLog(){
System.out.println("DatabaseLog");
}
}
public class DatabaseLogFactory implements LogFactory{
public Log createLogFactory(){
return new DatabaseLog();
}
}
class FileLog implements Log{
public void writeLog(){
System.out.println("FileLog");
}
}
public class FileLogFactory implements LogFactory{
public Log createLog(){
return new FileLog();
}
}
public interface Log {
void writeLog();
}
public interface LogFactory {
public Log creatLog();
}
第三题:抽象工厂模式实现数据库操作工厂
某系统为了改进数据操作的性能,自定义数据库连接对象Connection和语句对象Statement,可针对不同类型的数据库提供不同的连接对象和语句对象,如提供Oracle或MySQL专用连接类和语句类,而且用户可以通过配置文件等方式根据实际需要动态更换系统数据库。使用抽象工厂模式设计该系统。
参考类图如下:
public class Client {
public static void main(String[] args) {
DBFactory factory;
Connection connection;
Statement statement;
factory = new OracleFactory();
connection = new OracleConnection();
statement = new OracleStatement();
connection.connect();
statement.executeStatement();
}
}
public interface Connection {
public void connect();
}
public interface DBFactory {
public Connection createConnection();
public Statement createStatement();
}
public class MySQLConnection implements Connection{
public void connect(){
System.out.println("连接MySQL数据库");
}
}
public class MySQLFactory implements DBFactory{
public Connection createConnection(){
return new MySQLConnection();
}
public Statement createStatement(){
return new MySQLStatement();
}
}
public class MySQLStatement implements Statement{
public void executeStatement(){
System.out.println("执行MySQL语句");
}
}
public class OracleConnection implements Connection{
public void connect(){
System.out.println("连接Oracle数据库");
}
}
public class OracleFactory implements DBFactory{
public Connection createConnection(){
return new OracleConnection();
}
public Statement createStatement(){
return new OracleStatement();
}
}
public class OracleStatement implements Statement{
public void executeStatement(){
System.out.println("执行Oracle语句");
}
}
public interface Statement {
public void executeStatement();
}