zoukankan      html  css  js  c++  java
  • 第一次设计作业

    第一次设计作业#

    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() {}
    }
  • 相关阅读:
    《剑指Offer》二维数组中的查找
    白话计算机入门书籍--《穿越计算机的迷雾》有感
    Mysql Cluster7.5.6在 windows10 部署安装
    Mysql Cluster7.5.6 windows10 部署安装
    lll
    线程控制
    动态链接库相关知识
    二分查找及其变种简单易懂的模版
    白话 STL next_permutation 原理
    Maven本地上有包还去网上找包
  • 原文地址:https://www.cnblogs.com/sunminming/p/7795058.html
Copyright © 2011-2022 走看看