Teknologian jakaminen

Tutustu komentokavoihin ja niiden sovelluksiin

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

komentotila

komentotila on käyttäytymissuunnittelumalli, joka muuntaa pyynnön erilliseksi objektiksi, joka sisältää kaikki pyyntöön liittyvät tiedot. Tämän muunnoksen avulla voit parametroida menetelmiä erilaisiin pyyntöihin, viive- tai jonopyyntöihin perustuen ja toteuttaa peruuttamattomia toimintoja.

Komentotilan rakenne

Lisää kuvan kuvaus tähän

  1. lähettäjä (Lähettäjä) - tunnetaan myös nimellä "Invoker" - luokka vastaa pyynnön alustamisesta, jonka tulee sisältää jäsenmuuttuja viittauksen tallentamiseksi komentoobjektiin. Lähettäjä laukaisee komennon lähettämättä pyyntöä suoraan vastaanottajalle. Huomaa, että lähettäjä ei ole vastuussa komentoobjektin luomisesta: yleensä se saa valmiiksi luodun komennon asiakkaalta konstruktorin kautta.
  2. Tilaus(Komento) -rajapinta ilmoittaa yleensä vain menetelmän komennon suorittamiseksi.
  3. Erityiset tilaukset (Concrete Commands) toteuttaa erilaisia ​​pyyntöjä. Tietty komento itsessään ei viimeistele työtä, vaan delegoi kutsun liiketoimintalogiikkaobjektille. Mutta koodin yksinkertaistamiseksi nämä luokat voidaan yhdistää. Objektin suoritustavan vastaanottamiseen tarvittavat parametrit voidaan ilmoittaa tiettyjen komentojen jäsenmuuttujiksi. Voit tehdä komentoobjektista muuttumattoman ja sallia vain näiden jäsenmuuttujien alustuksen konstruktorin kautta.
  4. vastaanotin (Receiver) -luokka sisältää osan liiketoimintalogiikasta. Lähes mikä tahansa esine voi toimia vastaanottimena. Useimmat komennot käsittelevät vain yksityiskohtia siitä, kuinka pyyntö välitetään vastaanottajalle, ja vastaanottaja tekee varsinaisen työn itse.
  5. asiakas (Client) luo ja määrittää tiettyjä komentoobjekteja. Asiakkaan on välitettävä kaikki pyyntöparametrit, mukaan lukien vastaanottajakokonaisuus, komennon rakentajalle. Sen jälkeen luotu komento voidaan liittää yhteen tai useampaan lähettäjään.

Komentotilan yleinen koodi:

//抽象接收者
public abstract class Receiver{
	public abstract void operation();
}

//具体接收者
public class Recevier1 extends Recevier{
	public void operation(){
		...
	}
}

//通用命令接口
public interface Command{
	void execute();
}

//具体命令类
public class ConcreteCommand1 implements Command{
	private Receiver receiver;
	
	public ConcreteCommand1(Receiver _receiver){
		 this.receiver = _receiver;
	}
	
	public void execute(){
		this.receiver.operation();
	}
}

//调用者类
public class Invoker{
	private Command command;
	
	public void setCommand(Command _command){
		this.command = _command;
	}
	
	public void executeCommand(){
		this.command.execute();
	}
	
}

//主程序类
public class Client{
	public static void main(String[] args){
		//调用者
		Invoker invoker = new Invoker();
		//接收者
		Receiver receiver1 = new Receiver1();
		//定义一个命令
		Command command = new ConcreteCommand1(receiver1);
		
		invoker.setCommand(command);
		invoker.executeCommand();
	}
}