Compréhension personnelle : Séparez plusieurs commandes dans une classe et placez une commande dans chaque classe pour réaliser le découplage. Une classe ne correspond qu'à une seule fonction. Lors de l'utilisation de la commande, une autre classe gérera toutes les commandes de manière uniforme.
Inconvénients : S'il y a trop de fonctions, trop de classes seront créées
Le modèle de commande est un modèle de conception basé sur les données, qui appartient au modèle comportemental # 🎜🎜# . La requête est enveloppée dans un objet sous la forme d'une commande et transmise à l'objet appelant. L'objet appelant recherche un objet approprié capable de gérer la commande et transmet la commande à l'objet correspondant, qui exécute la commande.
IntroductionIntention : Encapsuler une requête dans un objet, vous permettant de paramétrer des clients ayant des requêtes différentes. Solution principale : dans les systèmes logiciels, les demandeurs de comportement et les implémenteurs de comportement ont généralement une relation étroitement couplée, mais dans certains cas, comme la nécessité d'enregistrer et d'annuler des comportements ou de refaire, des transactions, etc., cela une sorte de conception étroitement couplée qui ne peut pas résister aux changements ne convient pas. Quand utiliser : Dans certaines situations, telles que "enregistrement, annulation/rétablissement, transaction" et autres traitements de comportements, ce type de couplage étroit qui ne peut pas résister aux changements n'est pas approprié. Dans ce cas, comment découpler le « demandeur de comportement » du « implémenteur de comportement » ? L'abstraction d'un ensemble de comportements en objets peut permettre d'obtenir un couplage lâche entre eux. Comment résoudre : Appelez le destinataire via l'appelant pour exécuter la commande, l'ordre est : appelant→commande→récepteur. Code clé : Séparez les commandes dans la classe pour créer des classes pour elles. Ces classes de commandes ont la même classe parent. Avantages :package src.com.设计模式.命令模式; /* * 股票类 * */ public class Stock { private String name; private int quantity; public Stock(String name, int quantity) { this.name = name; this.quantity = quantity; } public void buy(){ System.out.println("股票买入成功"+name+",股数:"+quantity); } public void sell(){ System.out.println("股票卖出成功"+name+",股数: "+quantity); } }
package src.com.设计模式.命令模式; public interface Order { void execute(); }
package src.com.设计模式.命令模式; public class BuyStock implements Order{ //依赖于Stock对象 private Stock stock; public BuyStock(Stock stock) { this.stock = stock; } @Override public void execute() { //购买目标股票的业务操作 stock.buy(); } }
package src.com.设计模式.命令模式; public class SellStock implements Order{ private Stock stock; public SellStock(Stock stock) { this.stock = stock; } @Override public void execute() { stock.sell(); } }
package src.com.设计模式.命令模式; import java.util.ArrayList; import java.util.List; /* * 股票经纪人类 * */ public class Broker { private List<Order> orderList = new ArrayList<>(); //1.接受订单 public void takeOrder(Order order){ orderList.add(order); } //2.执行订单 public void placeOrders(){ orderList.forEach(fun ->{ fun.execute(); }); } }
package src.com.设计模式.命令模式; public class CommandPatternDemo { public static void main(String[] args) { Stock stock = new Stock("002607",100); BuyStock buyStock = new BuyStock(stock); SellStock sellStock = new SellStock(stock); Broker broker = new Broker(); broker.takeOrder(buyStock); broker.takeOrder(sellStock); broker.placeOrders(); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!