1 介绍
小白:走走走,买年货去,大哥😎。
Acey:额,这都几号了,你家的年货还没买呢?
小白:对哇,我妈早让我买来来着,我给整忘了😥。
Acey:alright,那我陪你一块去吧。去之前我们先来学习下命令模式吧。
命令模式:Command模式是行为模式的一种。定义将一个请求封装到一个对象中,可以根据不同的请求对客户进行初始化,这样可以达到行为请求和行为实现解耦,分离变与不变的因素。
Acey:我们就拿购买年货来说吧。每一种具体年货的购买就是一个请求,每一个人就是一个客户,根据不同的请求对客户进行初始化就是说客户对不同的商品进行购买。
小白:(((φ(◎ロ◎;)φ))),不是很懂诶。
Acey:好吧,那举个栗子吧。
2 实现
首先先讲讲Command模式的几个角色:
Command:所有命令的接口,声明执行的方法。(年货接口)
ConcreteCommand:命令的具体实现。(具体的年货)
Receiver:真正的执行对象,通常可以持有多个命令对象。(商家卖多种商品)
Invoker:要求命令对象执行。(客户购买商品)
具体实现
第一步:创建Receiver
Business.class
public class Business {
//business sail apple
public void sailApple(){
System.out.println("Apple");
}
//business sail blanana
public void sailBlanana(){
System.out.println("Blanana");
}
//business sail pear
public void sailPear(){
System.out.println("Pear");
}
}
第二步:创建Command接口
Shop.class
public abstract class Shop {
protected Business business;
public Shop(Business business) {
this.business = business;
}
public abstract void sail();
public void setBusiness(Business business){
this.business = business;
}
}
第三步:创建具体的Command实现
Banana.class / Apple.class / Pear.class
public class Apple extends Shop{
public Apple(Business business) {
super(business);
}
@Override
public void sail() {
business.sailApple();
}
}
public class Banana extends Shop{
public Banana(Business business) {
super(business);
}
@Override
public void sail() {
business.sailBlanana();
}
}
public class Pear extends Shop{
public Pear(Business business) {
super(business);
}
@Override
public void sail() {
business.sailPear();
}
}
第四步:创建Invoker
Person.class
public class Person {
//create a shopping Cart
private List<Shop> shopCart = new ArrayList();
//add a product to a shopping cart
public void addCart(Shop goods){
System.out.print("add ");
goods.sail();
shopCart.add(goods);
}
//remove a product in the shopping cart
public void remove(Shop goods){
System.out.print("remove ");
goods.sail();
shopCart.remove(goods);
}
public void buy(){
System.out.println("----------------------buy goods:");
for(Shop goods : shopCart){
goods.sail();
}
}
}
第五步:测试
public class MainClass {
public static void main(String[] args) {
Business business = new Business();
Shop apple = new Apple(business);
Shop banana = new Banana(business);
Shop pear = new Pear(business);
Person person = new Person();
person.addCart(pear);
person.addCart(banana);
person.addCart(apple);
person.buy();
}
}
命令模式是对命令加以封装,将发出命令的行为和执行命令的行为分离。
这样我们就可以动态的进行参数化、日志化和队列话等操作,使得系统更加的灵活。
喜欢的话戳一下喜欢呗。
有什么建议的话希望大家能在下方回复😋
上一篇:《状态模式 - 快捷键使用》
下一篇:《访问者模式》