设计模式第一次作业
2017-11-07 00:40
204 查看
1、某系统日志记录器要求支持多种日志记录方式,如文件记录、数据库记录等;用户可以根据要求动态选择日志记录方式。使用Factory模式来设计;如果系统中增加一个日志记录方式—控制台日志记录(ConsoleLog),类图将如何改变?
类图
日志类
工厂类
增加控制台日志后类图如下
2、某系统为了改进数据库操作的性能,自定义数据连接对象Connection和语句对象Statement,可针对不同类型的数据库提供不同的连接对象和语句对象;用户可以通过配置文件等方式根据实际需要动态更换系统数据库;使用Abstract Factory模式来设计。
类图
工厂类
Statement类
Connection类
3、KFC套餐是一个复杂对象,一般包括主食(如汉堡、鸡肉卷等)和饮料(如果汁、可乐等)组成部分,不同套餐有不同组成部分;KFC服务员要根据顾客要求,装配这些组成部分,构造一个完整套餐,返回给顾客;使用Builder模式来设计。
类图
关键类代码如下所示:
4、游戏中的地图:包括天空、地面、背景;人物包括人体、服装、装备等组成部分,如采用Builder模式如何设计?
类图
地图类
角色类
Director类
5、某系统需要提供一个加密模块,将用户信息(如密码等)加密之后再存储在数据库中,系统已经定义好数据库操作类。为了提高开发效率,现要重用已有的加密算法,这些算法由第三方提供,没有源码。如采用Adapter模式如何设计?
类图
关键类代码如下
类图
日志类
public interface log { public void writeLog(); } public class fileLog implements log { public void writeLog() { //文件日志类 } } public class databaseLog implements log { public void writeLog() { //数据库日志类 } }
工厂类
public interface logFactory { public log createLog(); } public class fileLogFactory implements logFactory { public log createLog() { //文件日志工厂类 return new fileLog(); } } public class databaseLogFactory implements logFactory { public log createLog() { //数据库日志工厂类 return new databaseLog(); } }
增加控制台日志后类图如下
2、某系统为了改进数据库操作的性能,自定义数据连接对象Connection和语句对象Statement,可针对不同类型的数据库提供不同的连接对象和语句对象;用户可以通过配置文件等方式根据实际需要动态更换系统数据库;使用Abstract Factory模式来设计。
类图
工厂类
public interface DatabaseFactory { public Connection creatConnection(); public Statement creatStatement(); } public class MySQLFactory implements DataBaseFactory { public Connection creatConnection() { return new MySQLConnection(); } public Statement creatStatement() { return new MySQLStatements(); } } public class OracleFactory implements DataBaseFactory { public Connection creatConnection() { return new OracleConnection(); } public Statement creatStatement() { return new OracleStatement(); } }
Statement类
public interface Statement { public void statement(); } public class MySQLStatement implements Statement { public void statement() { //MySQL语句类 } } public class OracleStatement implements Statement { public void statement() { //Oracle语句类 } }
Connection类
public interface Connection { public void connection(); //Connection接口 } public class MySQLConnection implements Connection { public void connection() { //MySQL连接类 } } public class OracleConnection implements Connection { public void connection() { //Oracle连接类 } }
3、KFC套餐是一个复杂对象,一般包括主食(如汉堡、鸡肉卷等)和饮料(如果汁、可乐等)组成部分,不同套餐有不同组成部分;KFC服务员要根据顾客要求,装配这些组成部分,构造一个完整套餐,返回给顾客;使用Builder模式来设计。
类图
关键类代码如下所示:
public class Meal { private String food; private String drink; public String getFood() { return food; } public void setFood(String food) { this.food = food; } public String getDrink() { return drink; } public void setDrink(String drink) { this.drink = drink; } } //builder类 public abstract class MealBuilder { protected Meal meal=new Meal(); public abstract void buildFood(); public abstract void bulidDrink(); public Meal getMeal() { return meal; } } //套餐A public class SubMealBuilderA extends MealBuilder { public void buildFood() { meal.setFood("一个鸡腿堡"); } public void bulidDrink() { meal.setDrink("一杯可乐"); } } //套餐B public class SubMealBuilderB extends MealBuilder { public void buildFood() { meal.setFood("一个鸡肉卷"); } public void bulidDrink() { meal.setDrink("一杯芬达"); } } //Director public class KFCWaiter { private MealBuilder mb; public void setMealBuilder(MealBuilder mb) { this.mb=mb; } public Meal construct() { mb.buildFood(); mb.bulidDrink(); return mb.getMeal(); } }
4、游戏中的地图:包括天空、地面、背景;人物包括人体、服装、装备等组成部分,如采用Builder模式如何设计?
类图
地图类
public class Map { private String sky; private String ground; private String background; public String getSky() { return sky; } public void setSky(String sky) { this.sky = sky; } public String getGround() { return ground; } public void setGround(String ground) { this.ground = ground; } public String getBackground() { return background; } public void setBackground(String background) { this.background = background; } } //builder类 public abstract class MapBuilder { protected Map map=new Map(); public abstract void buildSky(); public abstract void bulidGround(); public abstract void bulidBackground(); public Map getMap() { return map; } } //地图A public class MapBuilderA extends MapBuilder { public void buildSky() { map.setSky("blue"); } public void bulidGround() { map.setGround("sand"); } public void bulidBackground() { map.setBackground("dark"); } } //地图B public class MapBuilderB extends MapBuilder { public void buildSky() { map.setSky("cloudy"); } public void bulidGround() { map.setGround("stone"); } public void bulidBackground() { map.setBackground("dark"); } }
角色类
public class Role { private String body; private String suit; private String equip; public String getBody() { return body; } public void setBody(String body) { this.body = body; } public String getSuit() { return suit; } public void setSuit(String suit) { this.suit = suit; } public String getEquip() { return Equip; } public void setEquip(String equip) { this.equip = equip; } } //builder类 public abstract class RoleBuilder { protected Role role=new Role(); public abstract void buildBody(); public abstract void bulidSuit(); public abstract void bulidEquip(); public Role getRole() { return role; } } //角色A public class RoleBuilderA extends RoleBuilder { public void buildBody() { role.setBody("tall"); } public void bulidSuit() { map.setSuit("t-shit"); } public void bulidEquip() { map.setEquip("sword"); } } //角色B public class RoleBuilderB extends RoleBuilder { public void buildBody() { role.setBody("short"); } public void bulidSuit() { map.setSuit("dress"); } public void bulidEquip() { map.setEquip("arrow"); } }
Director类
//Director public class Game { private MapBuilder mapb; private RoleBuilder roleb; public void setMapBuilder(MapBuilder mapb) { this.mapb=mapb; } public Map constructMap() { mapb.buildSky(); mapb.bulidGround(); mapb.bulidBackground(); return mapb.getMap(); } public void setRoleBuilder(RoleBuilder roleb) { this.roleb=roleb; } public Role constructRole() { roleb.buildBody(); roleb.bulidSuit(); role.bulidEquip(); return roleb.getRole(); } }
5、某系统需要提供一个加密模块,将用户信息(如密码等)加密之后再存储在数据库中,系统已经定义好数据库操作类。为了提高开发效率,现要重用已有的加密算法,这些算法由第三方提供,没有源码。如采用Adapter模式如何设计?
类图
关键类代码如下
public abstract class DataOperator { private String password; public String getPassword() { return password; } public abstract String doEncrypt(int key,String ps); } public class CiperAdapter extends DataOperator { private Caesar cipher; public cipherAdapter() { cipher = new Caesar(); } public String doEncrypt(int key,String ps) { cipher.doEncrypt(key,ps); } } public class NewCiperAdapter extends DataOperator { private NewCaesar newCipher; public newCipherAdapter() { newCipher = new NewCaesar(); } public String doEncrypt(int key,String ps) { newCipher.doEncrypt(key,ps); } }
相关文章推荐
- 设计模式第一次作业
- 设计模式第一次作业
- 设计模式第一次作业
- 设计模式第一次作业
- 设计模式第一次作业
- 设计模式第一次作业
- OOAD作业---设计模式---装饰者模式
- 设计模式:Prototype 原型模式 - 同学你抄过别人的作业么?-clone()方法的使用
- 设计模式:策略模式-让你可以用不同的笔写作业
- 设计模式作业代码
- 第一次看完设计模式的总结
- 设计模式第二次作业
- 设计模式第二次作业
- 实时软件控制设计第一次作业
- 作业——在线学习Android课程之第十五周(设计模式二)
- OOAD作业--设计模式-解释器模式(Interpreter)
- 设计模式之Prototype——作业篇(原创)
- 第一次互评作业:MIPS汇编程序设计
- 机电大作业第一次设计文档
- oracle数据库设计第一次作业