所以我正在制作一个模拟星巴克应用程序,我希望每次客户点击“订单”按钮时,产品都会添加到ArrayList中,并且所有人都可以访问此ArrayList。我有点困惑在哪里插入全局ArrayList代码...
这是我的btnOrder的代码:
private void btnOrderActionPerformed(java.awt.event.ActionEvent evt) {
String name = lblName.getText();
String size = cmbSize.getSelectedItem().toString();
int quantity = (int) spnrQuantity.getValue();
int price=0;
if (size.equals("Tall 12oz")) {
price = 170;
} else if (size.equals("Grande 16oz")) {
price = 180;
} else if (size.equals("Venti 20oz")) {
price = 190;
}
Global.list.add(new Object());
new Receipt(name, size, quantity, price).setVisible(true);
}
这是我的Receipt框架的代码,其中包含JTable,因此我可以显示订单:
public class Receipt extends javax.swing.JFrame {
/**
* Creates new form Receipt
*/
public Receipt() {
initComponents();
}
String size, name;
int quantity, price;
public Receipt(String name, String size, int quantity, int price) {
initComponents();
this.name = name;
this.size = size;
this.quantity = quantity;
this.price = price;
addToTable();
}
void addToTable() {
DefaultTableModel table = (DefaultTableModel) tblCart.getModel();
Vector v = new Vector();
v.add(name);
v.add(size);
v.add(price);
v.add(quantity);
table.addRow(v);
}
这是可访问的ArrayList的代码:
public class Global {
public static ArrayList<Object> list = new ArrayList<>();
private Global(){
}
}
答案 0 :(得分:1)
管理全局状态可能是一场噩梦,而您可以使用单身人士来解决问题,但这违反了Single responsibility principle。它还删除了访问控制,允许任何人以他们认为合适的方式修改列表而无需控制。
另一个解决方案是使用某种模型,它可以在各个组件之间传递,如果你巧妙地使用interface
,你可以控制谁可以做什么以及何时做。
这是Model-View-Controller和program to interface not implementation原则的核心概念。
基本的想法是你会创建一个&#34;模型&#34;维护您要共享的数据,主要是客户订单中的项目(可能是客户的名称)
您可以创建一个合适的订单并将其引用传递给&#34; order&#34;视图,它可以在模型中添加/删除/更新项目。完成后,&#34;控制器&#34;然后将相同的模型实例传递给&#34;签出&#34; view,将使用此信息生成帐单(可能还有付款信息),最后存储交易
然后,您可以在最后获取模型中的信息并告知发生了什么。
由于您可能需要控制复杂状态,因此您可能需要多个模型,例如,您可以传递&#34;命令&#34;模拟到&#34;退房&#34;查看,但它可以创建一个&#34;事务&#34;模型,包装&#34;命令&#34;模型
答案 1 :(得分:0)
您可以在此处使用Singleton设计模式。使用单身人士,您可以利用静态对象无法实现的Polymorphism。
enum Global {
INSTANCE;
private ArrayList<Object> list = new ArrayList<>();
public void add(Object obj) {
//custom validations (if any)
list.add(obj);
}
public Object get(int index) {
//check here for permissions, validations etc...
return list.get(index);
}
//other methods to access your shared objects
...
}
在此示例中,使用ENUM实现单例模式,以确保线程安全。您还可以使用The ‘Inner Class’ Approach实现单例,这也是线程安全的。
<强>用法强>
private void btnOrderActionPerformed(java.awt.event.ActionEvent evt) {
...
Global.INSTANCE.add(new Object());
new Receipt(name, size, quantity, price).setVisible(true);
}