设计模式课程设计(抽象工厂模式,单例模式,代理模式)
设计模式课程设计:手机电脑商店
- 项目简介
- 抽象工厂模式
- 单例模式
- 代理模式
项目简介
该项目运用了三种设计模式:抽象工厂模式,单例模式,代理模式。用户可以在商店里购买自己想要的手机和电脑。项目运行环境为Netbeans8.2。运行效果如下:
进入商店界面,这里运用了单例模式,不管怎么点击进入商店按钮,只会有一个窗体弹出

进入商店,用户可以选择自己要购买的东西。

用户购买成功

抽象工厂模式
抽象工厂:
package AbstractFactory;
public interface EFactory {public Phone producePhone();public Computer produceComputer();
}
抽象产品:
package AbstractFactory;
public interface Computer {public String produce ();
}
package AbstractFactory;
public interface Phone {public String produce();
}
具体工厂:
package AbstractFactory;
public class HuaWeiFactory implements EFactory {public HuaWeiFactory() {}public Phone producePhone() {return new HuaWeiPhone();}public Computer produceComputer() {return new HuaWeiComputer();}}
package AbstractFactory;
public class XiaoMiFactory implements EFactory {public XiaoMiFactory() {}public Phone producePhone() {return new XiaoMiPhone();}public Computer produceComputer() {return new XiaoMiComputer();}
}
具体产品:
package AbstractFactory;
import Agent.AgentFrame;
public class HuaWeiComputer implements Computer {public HuaWeiComputer() {}public String produce() {System.out.println("华为电脑生产中......");String str = "华为电脑生产中......";return str;}
}
package AbstractFactory;
import Agent.AgentFrame;
public class HuaWeiPhone implements Phone {public HuaWeiPhone() {}public String produce() {System.out.println("华为手机生产中......");String str = "华为手机生产中......";return str;}
}
package AbstractFactory;
import Agent.AgentFrame;
public class XiaoMiComputer implements Computer {public XiaoMiComputer() {}public String produce() {System.out.println("小米电脑生产中......");String str = "小米电脑生产中......";return str;}
}
package AbstractFactory;
import Agent.AgentFrame;
public class XiaoMiPhone implements Phone {public XiaoMiPhone() {}public String produce() {System.out.println("小米手机生产中......");String str = "小米手机生产中......";return str;}
}
单例模式
package company;import AbstractFactory.Computer;
import AbstractFactory.EFactory;
import AbstractFactory.HuaWeiComputer;
import AbstractFactory.HuaWeiFactory;
import AbstractFactory.HuaWeiPhone;
import AbstractFactory.Phone;public class HuaWeiCompany {private static HuaWeiCompany huaweiCompany = null;private RealHuaWei realhuawei = new RealHuaWei();private HuaWeiCompany() {}public static HuaWeiCompany getHuaweiCompany() {if (huaweiCompany == null) {huaweiCompany = new HuaWeiCompany();}return huaweiCompany;}public Phone getPhoneProducts() {return realhuawei.getPhoneProducts();}public Computer getComputerProducts() {return realhuawei.getComputerProducts();}
}
package company;import AbstractFactory.Computer;
import AbstractFactory.EFactory;
import AbstractFactory.HuaWeiComputer;
import AbstractFactory.HuaWeiFactory;
import AbstractFactory.HuaWeiPhone;
import AbstractFactory.Phone;
import AbstractFactory.XiaoMiComputer;
import AbstractFactory.XiaoMiFactory;
import AbstractFactory.XiaoMiPhone;public class XiaoMiCompany {EFactory factory;Computer computer;Phone phone;private static XiaoMiCompany xiaomiCompany = null;private RealXiaoMi realxiaomi = new RealXiaoMi();private XiaoMiCompany() {}public static XiaoMiCompany getXiaomiCompany() {if (xiaomiCompany == null) {xiaomiCompany = new XiaoMiCompany();}return xiaomiCompany;}public Computer getComputerProducts() {return realxiaomi.getComputerProducts();}public Phone getPhoneProducts() {return realxiaomi.getPhoneProducts();}}
代理模式
package company;
import AbstractFactory.Computer;
import AbstractFactory.Phone;
public interface Permission {public Phone getPhoneProducts();public Computer getComputerProducts();
}
package company;
import AbstractFactory.Computer;
import AbstractFactory.Phone;
public interface Permission_2 {public Phone getPhoneProducts();public Computer getComputerProducts();
}
package company;
import AbstractFactory.Computer;
import AbstractFactory.*;
import AbstractFactory.Phone;
public class RealHuaWei implements Permission {EFactory factory;Computer computer;Phone phone;public Phone getPhoneProducts() {factory = new HuaWeiFactory();phone = new HuaWeiPhone();phone.produce();return phone;}@Overridepublic Computer getComputerProducts() {factory = new HuaWeiFactory();computer = new HuaWeiComputer();computer.produce();return computer;}}
package company;
import AbstractFactory.*;
public class RealXiaoMi {EFactory factory;Computer computer;Phone phone;public Computer getComputerProducts() {factory = new XiaoMiFactory();computer = new XiaoMiComputer();computer.produce();return computer;}public Phone getPhoneProducts() {factory = new XiaoMiFactory();phone = new XiaoMiPhone();phone.produce();return phone;}
}
商店:
/** To change this license header, choose License Headers in Project Properties.* To change this template file, choose Tools | Templates* and open the template in the editor.*/
package Agent;import javax.swing.JButton;
import javax.swing.JLabel;/**** @author 12995*/
public class WelcomeFrame extends javax.swing.JFrame {private AgentFrame f2;/*** Creates new form WelcomeFrame*/public WelcomeFrame() {initComponents();}/*** This method is called from within the constructor to initialize the form.* WARNING: Do NOT modify this code. The content of this method is always* regenerated by the Form Editor.*/@SuppressWarnings("unchecked")// private void initComponents() {jButton_Enter = new javax.swing.JButton();jLabel1 = new javax.swing.JLabel();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);jButton_Enter.setText("进入商店");jButton_Enter.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {jButton_EnterActionPerformed(evt);}});jLabel1.setText("手机电脑专卖店");javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(105, 105, 105).addComponent(jButton_Enter, javax.swing.GroupLayout.PREFERRED_SIZE, 254, javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup(layout.createSequentialGroup().addGap(182, 182, 182).addComponent(jLabel1))).addContainerGap(112, Short.MAX_VALUE)));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addContainerGap(107, Short.MAX_VALUE).addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(87, 87, 87).addComponent(jButton_Enter).addGap(31, 31, 31)));pack();}// private void jButton_EnterActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here:f2 = AgentFrame.getInstance();f2.setVisible(true);f2.setLocationRelativeTo(null);} /*** @param args the command line arguments*/public static void main(String args[]) {/* Set the Nimbus look and feel */// /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */try {for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {if ("Nimbus".equals(info.getName())) {javax.swing.UIManager.setLookAndFeel(info.getClassName());break;}}} catch (ClassNotFoundException ex) {java.util.logging.Logger.getLogger(WelcomeFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);} catch (InstantiationException ex) {java.util.logging.Logger.getLogger(WelcomeFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);} catch (IllegalAccessException ex) {java.util.logging.Logger.getLogger(WelcomeFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);} catch (javax.swing.UnsupportedLookAndFeelException ex) {java.util.logging.Logger.getLogger(WelcomeFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);}///* Create and display the form */java.awt.EventQueue.invokeLater(new Runnable() {public void run() {new WelcomeFrame().setVisible(true);}});}public JButton getjButton_Enter() {return jButton_Enter;}public void setjButton_Enter(JButton jButton_Enter) {this.jButton_Enter = jButton_Enter;}public JLabel getjLabel1() {return jLabel1;}public void setjLabel1(JLabel jLabel1) {this.jLabel1 = jLabel1;}// Variables declaration - do not modify private javax.swing.JButton jButton_Enter;private javax.swing.JLabel jLabel1;// End of variables declaration
}
/** To change this license header, choose License Headers in Project Properties.* To change this template file, choose Tools | Templates* and open the template in the editor.*/
package Agent;import AbstractFactory.Computer;
import AbstractFactory.EFactory;
import AbstractFactory.HuaWeiComputer;
import AbstractFactory.HuaWeiPhone;
import AbstractFactory.Phone;
import AbstractFactory.XiaoMiComputer;
import AbstractFactory.XiaoMiPhone;
import company.HuaWeiCompany;
import company.XiaoMiCompany;
import javax.swing.JTextArea;/**** @author 12995*/
public class AgentFrame extends javax.swing.JFrame {EFactory factory;Computer computer;Phone phone;private static AgentFrame SingletonFrame = null;//public AbstractPermission permission = new PermissionProxy();HuaWeiCompany hwc = HuaWeiCompany.getHuaweiCompany();XiaoMiCompany xmc = XiaoMiCompany.getXiaomiCompany();/*** Creates new form AgentFrame*/private AgentFrame() {initComponents();}public static AgentFrame getInstance() {if (SingletonFrame == null) {SingletonFrame = new AgentFrame();}return SingletonFrame;}/*** This method is called from within the constructor to initialize the form.* WARNING: Do NOT modify this code. The content of this method is always* regenerated by the Form Editor.*/@SuppressWarnings("unchecked")// private void initComponents() {jLabel1 = new javax.swing.JLabel();jCheckBox1 = new javax.swing.JCheckBox();jCheckBox2 = new javax.swing.JCheckBox();jCheckBox3 = new javax.swing.JCheckBox();jCheckBox4 = new javax.swing.JCheckBox();jButton_Buy = new javax.swing.JButton();jPanel1 = new javax.swing.JPanel();jScrollPane2 = new javax.swing.JScrollPane();jTextArea_Display = new javax.swing.JTextArea();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);jLabel1.setText("欢迎光临本商店");jCheckBox1.setText("华为手机");jCheckBox2.setText("华为电脑");jCheckBox3.setText("小米手机");jCheckBox4.setText("小米电脑");jButton_Buy.setText("购买");jButton_Buy.addMouseListener(new java.awt.event.MouseAdapter() {public void mouseClicked(java.awt.event.MouseEvent evt) {jButton_BuyMouseClicked(evt);}});jTextArea_Display.setColumns(20);jTextArea_Display.setRows(5);jScrollPane2.setViewportView(jTextArea_Display);javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);jPanel1.setLayout(jPanel1Layout);jPanel1Layout.setHorizontalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jScrollPane2));jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 219, Short.MAX_VALUE));javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(180, 180, 180).addComponent(jLabel1).addGap(0, 0, Short.MAX_VALUE)).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(jCheckBox1).addGap(47, 47, 47).addComponent(jCheckBox2).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 48, Short.MAX_VALUE).addComponent(jCheckBox3).addGap(41, 41, 41).addComponent(jCheckBox4))).addContainerGap()).addGroup(layout.createSequentialGroup().addGap(182, 182, 182).addComponent(jButton_Buy).addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent(jLabel1).addGap(29, 29, 29).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jCheckBox1).addComponent(jCheckBox2).addComponent(jCheckBox3).addComponent(jCheckBox4)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addComponent(jButton_Buy).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));pack();}//
/**/private void jButton_BuyMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here:if (jCheckBox1.isSelected()) {HuaWeiPhone HWP;// HWP = (HuaWeiPhone) permission.buyHWPProducct("华为手机");HWP=(HuaWeiPhone) hwc.getPhoneProducts();jTextArea_Display.append(HWP.produce() + "\n");jTextArea_Display.append("这是您要购买的华为手机,请拿好!\n");jTextArea_Display.append("\n");}if (jCheckBox2.isSelected()) {HuaWeiComputer HWC;//HWC = (HuaWeiComputer) permission.buyHWCProducct("华为电脑");HWC=(HuaWeiComputer) hwc.getComputerProducts();jTextArea_Display.append(HWC.produce() + "\n");jTextArea_Display.append("这是您要购买的华为电脑,请拿好!\n");jTextArea_Display.append("\n");}if (jCheckBox3.isSelected()) {XiaoMiPhone XMP;//XMP = (XiaoMiPhone) permission.buyXMPProducct("小米手机");XMP= (XiaoMiPhone) xmc.getPhoneProducts();jTextArea_Display.append(XMP.produce() + "\n");jTextArea_Display.append("这是您要购买的小米手机,请拿好!\n");jTextArea_Display.append("\n");}if (jCheckBox4.isSelected()) {XiaoMiComputer XMC;//XMC = (XiaoMiComputer) permission.buyXMCProducct("小米电脑");XMC=(XiaoMiComputer)xmc.getComputerProducts();jTextArea_Display.append(XMC.produce() + "\n");jTextArea_Display.append("这是您要购买的小米电脑,请拿好!\n");jTextArea_Display.append("\n");}} public JTextArea getjTextArea_Display() {return jTextArea_Display;}public void setjTextArea_Display(JTextArea jTextArea_Display) {this.jTextArea_Display = jTextArea_Display;}// Variables declaration - do not modify private javax.swing.JButton jButton_Buy;private javax.swing.JCheckBox jCheckBox1;private javax.swing.JCheckBox jCheckBox2;private javax.swing.JCheckBox jCheckBox3;private javax.swing.JCheckBox jCheckBox4;private javax.swing.JLabel jLabel1;private javax.swing.JPanel jPanel1;private javax.swing.JScrollPane jScrollPane2;private javax.swing.JTextArea jTextArea_Display;// End of variables declaration
}
NetBeans8.2UML插件安装地址: http://updates.netbeans.org/netbeans/updates/6.5/uc/final/stable/catalog_zh_CN.xml.gz
NetBeans8.2安装UML教程请自行百度。
项目源码:JavaApplication1_1
类图:UMLProject1
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
