设计模式第一次作业
2017-11-06 22:15
344 查看
1、要求:某系统日志记录器要求支持多种日志记录方式,如文件记录、数据库记录等;用户可以根据要求动态选择日志记录方式。使用Factory模式来设计;如果系统中增加一个日志记录方式—控制台日志记录(ConsoleLog),类图将如何改变?
类图:
增加控制台日志记录后的类图:
代码:
2、要求:某系统为了改进数据库操作的性能,自定义数据连接对象Connection和语句对象Statement,可针对不同类型的数据库提供不同的连接对象和语句对象;用户可以通过配置文件等方式根据实际需要动态更换系统数据库;使用Abstract Factory模式来设计。
类图:
代码:
3、要求:KFC套餐是一个复杂对象,一般包括主食(如汉堡、鸡肉卷等)和饮料(如果汁、可乐等)组成部分,不同套餐有不同组成部分;KFC服务员要根据顾客要求,装配这些组成部分,构造一个完整套餐,返回给顾客;使用Builder模式来设计。
类图:
代码:
4、要求:游戏中的地图:包括天空、地面、背景;人物包括人体、服装、装备等组成部分,如采用Builder模式如何设计?
类图:
代码:
5、某系统需要提供一个加密模块,将用户信息(如密码等)加密之后再存储在数据库中,系统已经定义好数据库操作类。为了提高开发效率,现要重用已有的加密算法,这些算法由第三方提供,没有源码。如采用Adapter模式如何设计?
类图:
代码:
类图:
增加控制台日志记录后的类图:
代码:
//主函数 public static void main(String[] args) { LogFactory factory=new FileLogFactory(); Log log=factory.createLog(); log.writeLog(); } //接口 public interface Log { public void writeLog(); } public interface LogFactory { public Log createLog(); } //文件 public class FileLog implements Log{ public void writeLog() { System.out.println("写文件日志"); } } public class FileLogFactory implements LogFactory{ public Log createLog() { return new FileLog(); } } //数据库 public class DatabaseLog implements Log{ public void writeLog() { System.out.println("写数据库日志"); } } public class DatabaseLogFactory implements LogFactory{ public Log createLog() { ; return new DatabaseLog(); } }
2、要求:某系统为了改进数据库操作的性能,自定义数据连接对象Connection和语句对象Statement,可针对不同类型的数据库提供不同的连接对象和语句对象;用户可以通过配置文件等方式根据实际需要动态更换系统数据库;使用Abstract Factory模式来设计。
类图:
代码:
//主函数 public static void main(String[] args) { DatabaseFactory factory=new DB1Factory(); Connection connection=factory.CreateConnection(); Statement statement=factory.CreateStatement(); connection.CreateConnection(); statement.CreateStatement(); } //抽象工厂类 public class abstract DatabaseFactory { public abstract Connection CreateConnection(); public abstract Statement CreateStatement(); } //statement对象类 public abstract class Statement { public void CreateStatement(); } //connection对象类 public abstract class Connection { public void CreateConnection(); } //DB1工厂类 public class DB1Factory implements DatabaseFactory{ @Override public Connection CreateConnection() { return new Connection1(); } @Override public Statement CreateStatement() { return new Statement2(); } } //DB1连接对象 public class Connection1 extends Connection{ @Override public void CreateConnection() { System.out.println("Connection"); } } //DB1语句对象 public class Statement1 extends Statement{ @Override public void CreateStatement() { System.out.println("Statement"); } }
3、要求:KFC套餐是一个复杂对象,一般包括主食(如汉堡、鸡肉卷等)和饮料(如果汁、可乐等)组成部分,不同套餐有不同组成部分;KFC服务员要根据顾客要求,装配这些组成部分,构造一个完整套餐,返回给顾客;使用Builder模式来设计。
类图:
代码:
//主函数 public static void main(String[] args) { Waiter waiter=newWaiter(mealBuilder); MealBuilder mealBuilder=new MealBuilder(); waiter.setMealBuilder(mealBuilder); Meal meal=Waiter.construct(); } /*Director*/ public class Waiter { private MealBuilder mealBuilder; public void setMealBuilder(MealBuilder mealBuilder){ this.mealBuilder=mealBuilder; } public Meal construct(){ mealBuilder.BuildFood(); mealBuilder.BuildDrink(); return mealBuilder.getMeal(); } } /* builder*/ public abstract class MealBuilder { protected Meal meal=new Meal(); public abstract void BuildFood(); public abstract void BuildDrink(); public Meal getMeal(){ return meal; } } //builderA public class MealBuilderA extends MealBuilder{ @Override public void BuildFood() { this.setFood("chicken"); } @Override public void BuildDrink() { this.setDrink("coco"); } } //产品 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; } }
4、要求:游戏中的地图:包括天空、地面、背景;人物包括人体、服装、装备等组成部分,如采用Builder模式如何设计?
类图:
代码:
//Game public class Game{ RoleBuilder rolebuilder; MapBuilder mapbuilder; Map map; List<Role> RoleList; public void Game(RoleBuilder rb,MapBuilder mb){ rolebuilder=rb; mapbuilder=mb; RoleList=new List<Role>(); } public void BuildMap(){ mapbuilder.buildBackground(); mapbuilder.buildObstacle(); map=mapbuilder.getMap(); } public void AddRole(int type){ if(type==0) rolebuilder=new Player(); else rolebuilder=new Enemy(); RoleList.Add(rolebuilder.GetRole()); } } //builder public class RoleBuilder{ public Role role; public abstract void buildeBody(); public abstract void buildeWeapon(); public abstract void buildeClothes(); public Role getRole(){ return role; } } //builder public abstract class MapBuilder{ private Map map; public abstract void builSky(); public abstract void buildGround(); public abstract void buildBackground(); public Map getMap(){ return map; } } //实体类 public class Map{ private string sky; private string ground; private string background; public void setSky(string sky) {this.sky = sky;} public string getSky() {return sky; } public void setGround(string ground){this.ground = ground;} public string getGround(){ return ground;} public void setBackGround(string background){this.background = background;} public string getBackGround(){return background;} } //实体类 public class Role{ private string body; private string cloth; private string weapon; public void setBody(string body) { this.body = body; } public string getBody() { return body; } public void setCloth(string cloth) { this.cloth = cloth; } public string getCloth() { return cloth; } public void setWeapon(string weapon) { this.weapon= weapon; } public string getWeapon() { return weapon; } } public class System:MapBuilder{ public override void buildeBackground(){} public override void buildeGround(){} public override void buildeSky(){} public System(){ buildeBackground(); buildeGround(); buildeSky(); } } public class Player:RoleBuilder{ public override void buildeClothes(){} public override void buildeBody(){} public override void buildeWeapon(){} public Player(){ buildeBody(); buildeClothes(); buildeWeapon(); } }
5、某系统需要提供一个加密模块,将用户信息(如密码等)加密之后再存储在数据库中,系统已经定义好数据库操作类。为了提高开发效率,现要重用已有的加密算法,这些算法由第三方提供,没有源码。如采用Adapter模式如何设计?
类图:
代码:
//数据操作抽象类 public abstract class DataEncrypt{ private String psw; public String PassWord{ get { return psw; } set { psw = value; } } public abstract String Encrypt(String psw); } //加密适配器A public class EncryptAdapter_A : DataEncrypt{ Encrypt_A encrypt; public EncryptAdapter_A(){ encrypt = new Encrypt_A(); } public override string Encrypt(string psw){ return encrypt.Encrypt(psw); } } //加密适配器B public class EncryptAdapter_B : DataEncrypt{ Encrypt_B encrypt; public EncryptAdapter_B() { encrypt = new Encrypt_B(); } public override string Encrypt(string psw) { return encrypt.Encrypt(psw); } } //加密算法A public class Encrypt_A{ public String Encrypt(string psw){ return "EncryptA"; } } //加密算法B public class Encrypt_B{ public String Encrypt(string psw){ return "EncriptB"; } } //主函数 static void Main(string[] args){ DataEncrypt data_en; data_en = new EncryptAdapter_A(); data_en.PassWord = "helloworld"; Console.WriteLine(data_en.Encrypt(data_en.PassWord)); data_en = new EncryptAdapter_B(); data_en.PassWord = "helloworld"; Console.WriteLine(data_en.Encrypt(data_en.PassWord)); return; }
相关文章推荐
- 设计模式第一次作业
- 设计模式第一次作业
- 设计模式第一次作业
- 设计模式第一次作业
- 设计模式第一次作业
- 设计模式第一次作业
- 设计模式第二次作业
- 设计模式第二次作业
- 系统分析与设计——第一次作业
- 系统分析与设计——第一次作业
- 设计模式:Prototype 原型模式 - 同学你抄过别人的作业么?-clone()方法的使用
- 设计模式作业代码
- 设计模式:策略模式-让你可以用不同的笔写作业
- 系统分析与设计_第一次作业
- 设计模式第三次作业
- 原创 装饰者设计模式实例(第一次自己写博文,欢迎指正交流)
- 软工第一次结对作业——原型设计
- OOAD作业--设计模式-解释器模式(Interpreter)
- 系统分析与设计第一次作业
- 作业——在线学习Android课程之第十五周(设计模式二)