当前位置: 首页 > news >正文

网站开发测试题搜索引擎有哪些技巧

网站开发测试题,搜索引擎有哪些技巧,wordpress pdf,网络架设提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某…

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…

文章目录

  • 前言
  • 一、概述
  • 二、结构
  • 三、案例实现
  • 四、优缺点
  • 五、使用场景
  • 六、JDK源码解析
  • 总结


前言

一、概述
二、结构
三、案例实现
四、优缺点
五、使用场景
六、JDK源码解析


一、概述

日常生活中,我们出去吃饭都会遇到下面的场景。

在这里插入图片描述
定义:

将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。

二、结构

命令模式包含以下主要角色:

  • 抽象命令类(Command)角色: 定义命令的接口,声明执行的方法。
  • 具体命令(Concrete Command)角色:具体的命令,实现命令接口;通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。
  • 实现者/接收者(Receiver)角色: 接收者,真正执行命令的对象。任何类都可能成为一个接收者,只要它能够实现命令要求实现的相应功能。
  • 调用者/请求者(Invoker)角色: 要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方,也就是说相当于使用命令对象的入口。

三、案例实现

将上面的案例用代码实现,那我们就需要分析命令模式的角色在该案例中由谁来充当。

服务员: 就是调用者角色,由她来发起命令。

资深大厨: 就是接收者角色,真正命令执行的对象。

订单: 命令中包含订单。

类图如下:
在这里插入图片描述
代码如下:

//抽象命令类
public interface Command {void execute();//只需要定义一个统一的执行方法
}//具体的命令类
public class OrderCommand implements Command {//持有接受者对象private SeniorChef receiver;//持有订单对象private Order order;public OrderCommand(SeniorChef receiver, Order order){this.receiver = receiver;this.order = order;}public void execute()  {System.out.println(order.getDiningTable() + "桌的订单:");Map<String, Integer> foodDic = order.getFoodDic();//遍历map集合Set<String> keys = foodDic.keySet();for (String foodName : keys) {receiver.makeFood(foodDic.get(foodName),foodName);}try {Thread.sleep(100);//停顿一下 模拟做饭的过程} catch (InterruptedException e) {e.printStackTrace();}System.out.println(order.getDiningTable() + "桌的饭弄好了");}
}//订单类
public class Order {// 餐桌号码private int diningTable;// 用来存储餐名并记录份数private Map<String, Integer> foodDic = new HashMap<String, Integer>();public int getDiningTable() {return diningTable;}public void setDiningTable(int diningTable) {this.diningTable = diningTable;}public Map<String, Integer> getFoodDic() {return foodDic;}public void setFoodDic(String name, int num) {foodDic.put(name,num);}
}// 资深大厨类 是命令的Receiver
public class SeniorChef {public void makeFood(int num,String foodName) {System.out.println(num + "份" + foodName);}
}//服务员类(属于请求者角色)
public class Waitor {private ArrayList<Command> commands;//可以持有很多的命令对象public Waitor() {commands = new ArrayList();}public void setCommand(Command cmd){//将cmd对象存储到list集合中commands.add(cmd);}// 发出命令 喊 订单来了,厨师开始执行public void orderUp() {System.out.println("美女服务员:叮咚,大厨,新订单来了.......");for (int i = 0; i < commands.size(); i++) {Command cmd = commands.get(i);if (cmd != null) {cmd.execute();}}}
}public class Client {public static void main(String[] args) {//创建2个orderOrder order1 = new Order();order1.setDiningTable(1);order1.setFoodDic("西红柿鸡蛋面",1);order1.setFoodDic("小杯可乐",2);Order order2 = new Order();order2.setDiningTable(3);order2.getFoodDic().put("尖椒肉丝盖饭",1);order2.getFoodDic().put("小杯雪碧",1);//创建接收者(厨师)SeniorChef receiver=new SeniorChef();//将订单和接收者封装成命令对象OrderCommand cmd1 = new OrderCommand(receiver, order1);OrderCommand cmd2 = new OrderCommand(receiver, order2);//创建调用者 waitorWaitor invoker = new Waitor();invoker.setCommand(cmd1);invoker.setCommand(cmd2);//将订单带到柜台 并向厨师喊 订单来了invoker.orderUp();}
}

在这里插入图片描述

四、优缺点

1,优点:

  • 降低系统的耦合度。命令模式能将调用操作的对象与实现该操作的对象解耦。
  • 增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,它满足“开闭原则”,对扩展比较灵活。
  • 可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组合命令,即宏命令。
  • 方便实现 Undo 和 Redo 操作。命令模式可以与后面介绍的备忘录模式结合,实现命令的撤销与恢复。

2,缺点:

  • 使用命令模式可能会导致某些系统有过多的具体命令类。
  • 系统结构更加复杂。

五、使用场景

  • 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
  • 系统需要在不同的时间指定请求、将请求排队和执行请求。
  • 系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。

六、JDK源码解析

Runable是一个典型命令模式,Runnable担当命令的角色,Thread充当的是调用者,start方法就是其执行方法

//命令接口(抽象命令角色)
public interface Runnable {public abstract void run();
}//调用者
public class Thread implements Runnable {private Runnable target;public synchronized void start() {if (threadStatus != 0)throw new IllegalThreadStateException();group.add(this);boolean started = false;try {start0();started = true;} finally {try {if (!started) {group.threadStartFailed(this);}} catch (Throwable ignore) {}}}private native void start0();
}

会调用一个native方法start0(),调用系统方法,开启一个线程。而接收者是对程序员开放的,可以自己定义接收者。

/*** jdk Runnable 命令模式*		TurnOffThread : 属于具体*/
public class TurnOffThread implements Runnable{private Receiver receiver;public TurnOffThread(Receiver receiver) {this.receiver = receiver;}public void run() {receiver.turnOFF();}
}
/*** 测试类*/
public class Demo {public static void main(String[] args) {Receiver receiver = new Receiver();TurnOffThread turnOffThread = new TurnOffThread(receiver);Thread thread = new Thread(turnOffThread);thread.start();}
}

总结

以上就是设计模式之命令模式【行为型模式】的相关知识点,希望对你有所帮助。
积跬步以至千里,积怠惰以至深渊。时代在这跟着你一起努力哦!

http://www.mmbaike.com/news/82815.html

相关文章:

  • 哪里建个人网站好宁波seo外包平台
  • 网站类别选择网络营销推广计划
  • 昆明网站建设教学视频百度推广广告收费标准
  • 免费网站开发模板网络服务投诉平台
  • 手机网站制作器竞价排名推广
  • 昆明网站建设yn119seo排名优化联系13火星软件
  • 西安网站优化营销方式都有哪些
  • 手机网站返回按钮怎么做网站建设公司官网
  • excel表如何做网站连接如何做电商赚钱
  • 网站建设预付款比例爱站seo查询
  • 1920网站banner尺寸百度seo优化是做什么的
  • 网站百度显示绿色官网字如何做的济南seo的排名优化
  • 我想建网站找谁今日新闻摘抄10条简短
  • 安阳做网站的费用枫树seo
  • 湖南省建筑设计院集团有限公司商丘seo推广
  • 河南新乡做网站公司产品宣传推广策划
  • 网站做seo推广seo视频教学网站
  • 独立网站怎么做seo广告推广有哪些平台
  • 做网站用小型机或服务器西安百度推广排名
  • 专门找建筑案例的网站外链网盘系统
  • 南京网站建设网站设计手机营销推广方案
  • 嵌入式软件开发培训机构好的seo网站
  • 做排名的网站哪个好惠东seo公司
  • 毕业设计做网站 服务器怎么弄网页设计和网站制作
  • 手机查看别人网站代码吗关键词生成器
  • 高端大气上档次网站网络营销策划名词解释
  • 海西州建设局网站市场推广方案怎么做
  • 龙岩装修公司排名seo公司哪家好
  • 网站开发公司成都百度购物平台客服电话
  • 网站商城开发公司传媒公司