设计模式第一次作业

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

代码:
      public class Client {  
      public static void main(String[] args) {  
        try {  
            Log log;  
            LogFactory factory2;  
            factory2 = new FileLogFactory();   
            log = factory2.createLog();  
            log.writeLog();   
          } catch(Exception e) {  
            System.out.println(e.getMessage());  
        }  
       }  
    }  
  
     public class DatabaseFile implements Log{  
      public void writeLog() {  
        System.out.println("数据库日志写入中。。。");  
    }  
     }   
  
      public class DatabaseLogFactory implements LogFactory{  
       public Log createLog() {  
        System.out.println("数据库日志工厂生产数据库日志。");  
        return new DatabaseFile();  
        }  
       }  

  
      public class FileLog implements Log{  
      public void writeLog() {  
        System.out.println("文件日志写入中。。。");  
       }  
       }  
  
      public class FileLogFactory implements LogFactory{  
       public Log createLog() {  
        System.out.println("文件日志工厂生产文件日志。");  
        return new FileLog();  
        }  
       }   
  
     public interface Log {  
        public void writeLog();  
      }   
  
      public interface LogFactory {  
        public Log createLog();  
      }  
   

添加控制台日志记录(ConsoleLog)的类图:
1249633-20171108190959747-1471554304.png

3、要求:KFC套餐是一个复杂对象,一般包括主食(如汉堡、鸡肉卷等)和饮料(如果汁、可乐等)组成部分,不同套餐有不同组成部分;KFC服务员要根据顾客要求,装配这些组成部分,构造一个完整套餐,返回给顾客;使用Builder模式来设计。

类图:
1249633-20171108191236091-1106077139.png

代码:
~~~

   public class Meal()
  {
private string food; 
private string drink;

public void setFood(string food)
{
    this.food = food;
}
public string getFood()
{
    return food;
}
public void setDrink(string drink)
{
    this.drink = drink;
}
public string getDrink()
{
    return drink;
}
   }

  public abstract class MealBulider()
  {
private Meal meal = new Meal();

abstract void buildFood();
abstract void buildDrink();
public Meal getMael()
{
    return meal;
}
    }

   public class MealABuilder extends MealBulider()
   {
pubilc void buildFood()
{
    super.meal.setFood("一个汉堡");
}
public void buildFrink()
{
    super.meal.setDrink("一杯可乐");
}
  }

   public class MealBBuilder extends MealBulider()
   {
pubilc void buildFood()
{
    super.meal.setFood("一个鸡肉卷");
}
public void buildFrink()
{
    super.meal.setDrink("一杯柠檬汁");
}
   }

   public class KFCWaiter()
   {
private MealBulider mealBuilder;

public void setMealBuilder(MealBuilder mealBuilder)
{
    this.mealBuilder = mealBuilder;
}
public Meal construct()
{
    mealBuilder.buildFood();
    mealBuilder.buildDrink();
    return mealBuilder.getMeal();
 }

   }

   public class Client
   {
public static void main(String[] args)
{
    KFCWaiter waiter = new  KFCWaiter();
    MealBuilder a = new MealABuilder();
    waiter.setMealBuilder(a);
    Meal mealA = waiter.constuct();

    System.out.println("套餐组合:");
    System.out.println(mealA.getFood()+"--"+mealA.getDrink());
    }
    }

4.要求:游戏中的地图:包括天空、地面、背景;人物包括人体、服装、装备等组成部分,如采用Builder模式如何设计?
类图:1249633-20171108191253841-1783343668.png

代码:
~~~
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 abstract class MapBulider()
    {
private Map map = new Map();

abstract void buildSky();
abstract void buildGround();
abstract void buildBackGround();
public Map getMap()
{
    return map;
}
    }

   public class MapABuilder extends MapBulider()
   {
pubilc void buildSky()
{
    super.map.setSky("blue");
}
public void buildGround()
{
    super.map.setGround("rough");
}
public void buildBackGround()
{
    super.map.setBackGround("nothing");
}
    }

     public class MapBBuilder extends MapBulider()
     {
pubilc void buildSky()
{
    super.map.setSky("black");
}
public void buildGround()
{
    super.map.setGround("smooth");
}
public void buildBackGround()
{
    super.map.setBackGround("something");
}
   }

    public class Role()
    {
private string body;
private string clothing;
private string equip;

public void setBody(string body)
{
    this.body = body;
}
public string getBody()
{
    return body;
}
public void setClothing(string clothing)
{
    this.clothing = clothing;
}
public string getClothing()
{
    return clothing;
}
public void setEquip(string equip)
{
    this.equip = equip;
}
public string getEquip()
{
    return equip;
}
    }

   public abstract class RoleBuilder()
   {
private Role role = new Role();

abstract void buildBody();
abstract void buildClothing();
abstract void buildEquip();
public Role getRole()
{
    return role;
}
   }

   public class RoleABuilder extends RoleBulider()
   {
pubilc void buildBody()
{
    super.role.setBody("high");
}
public void buildClothing()
{
    super.role.setclothing("coat");
}
public void buildEquip()
{
    super.role.setEquip("expensive");
}
   }

  public class RoleBBuilder extends RoleBulider()
  {
pubilc void buildBody()
{
    super.role.setBody("short");
}
public void buildClothing()
{
    super.role.setclothing("T-shirt");
}
public void buildEquip()
{
    super.role.setEquip("cheap");
}
  }


    public class Game()
    {
private MapBulider mapBuilder;
private RoleBuilder roleBuilder;

public void setMapBuilder(MapBuilder mapBuilder)
{
    this.mapBuilder = mapBuilder;
}
public Map constructMap()
{
    mapBuilder.buildSky();
    mapBuilder.buildGround();
    mapBuilder.buildBackGround();
    return mapBuilder.getMap();
}

public void setRoleBuilder(RoleBuilder roleBuilder)
{
    this.roleBuilder = roleBuilder;
}
public Role constructRole()
{
    roleBuilder.buildBody();
    roleBuilder.buildClothing();
    roleBuilder.buildEquip();
    return roleBuilder.getRole();
 }
    }

    public class Client
    {
public static void main(String[] args)
{
    Game game = new  Game();
    MapBuilder a = new MapABuilder();
    RoleBuilder b = new RoleABuilder();
    game.setMapBuilder(a);
    game.setRoleBuilder(b);
    Map mapA = game.constuctMap();
    Role roleA = game.constuctRole();
    System.out.println("游戏组合:");
    System.out.printf("the map sky %s ground %s background %s\n", mapA.getSky(), mapA.getGround(), mapA.getBackground());
    System.out.printf("the role body %s clothing %s equip %s\n", roleA.getBody(), roleA.getColthing(), roleA.getEquip());           
    }
   }

5、某系统需要提供一个加密模块,将用户信息(如密码等)加密之后再存储在数据库中,系统已经定义好数据库操作类。为了提高开发效率,现要重用已有的加密算法,这些算法由第三方提供,没有源码。如采用Adapter模式如何设计?

转载于:https://www.cnblogs.com/wlf123/p/7783107.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值