设计模式---外观模式


package Facade;

import java.sql.SQLException;

public interface F {

    void f() throws SQLException;

}
package Facade;

import Iterator.Aggregate;
import Iterator.ConcreteAggregate;
import Iterator.MyIterator;
import entity.Table;
import factory.DoSelect;
import factory.DoUpdate;
import singleton.ScannerSingle;

import java.sql.ResultSet;
import java.sql.SQLException;

public class F1 implements F{


    //集合遍历的时候,迭代器模式
    @Override
    public void f() throws SQLException {
        Aggregate aggregate = new ConcreteAggregate<>();

        System.out.println("---目前空闲的餐桌号有:");
        ResultSet resultSet = (ResultSet) new DoSelect().doFactory("SELECT `id`, `people`, `status` FROM `table` WHERE 1;");
        while (resultSet.next()) {

            int id = resultSet.getInt("id");
            int people = resultSet.getInt("people");
            String status = resultSet.getString("status");
            if (status.equals("null")) {
                System.out.println(id + " 号桌是空的,可以容纳 " + people + " 人");

                aggregate.add(new Table(id, people, status));
            }
        }

        System.out.println("======请输入您想预定的餐桌号:");
        int x = ScannerSingle.getScanner().nextInt();
        boolean check = false;

        //拿到容器迭代器,使用迭代器遍历
        MyIterator
iterator = aggregate.iterator(); while (iterator.hasNext()) { if (iterator.next().getId() == x) { check = true; break; } } if (check) { Object o = new DoUpdate().doFactory("UPDATE `table` SET `status`= '有人' WHERE `id` = " + x); if(o==null) { System.out.println("预定失败"); }else{ System.out.println("预定餐桌成功"); } } else { System.out.println("需输入正确的空闲餐桌号,请重新操作"); } } }
package Facade;

import Iterator.Aggregate;
import Iterator.ConcreteAggregate;
import Iterator.MyIterator;
import entity.Menu;
import entity.Table;
import factory.DoSelect;
import factory.DoUpdate;
import singleton.ScannerSingle;

import java.sql.ResultSet;
import java.sql.SQLException;

public class F2 implements F {

    @Override
    public void f() throws SQLException {
        Aggregate aggregate = new ConcreteAggregate<>();

        System.out.println("######菜单如下:");
        ResultSet resultSet = (ResultSet) new DoSelect().doFactory("SELECT `id`, `name`, `price` FROM `menu` WHERE 1");
        while (resultSet.next()) {

            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            double price = resultSet.getDouble("price");

            System.out.println(id + "    " + name + "    " + price);
            aggregate.add(new Menu(id, name, price));
        }

        System.out.println("===========请输入您想点的菜号:");
        int x = ScannerSingle.getScanner().nextInt();
        System.out.println("===========请输入您的餐桌号:");
        int y = ScannerSingle.getScanner().nextInt();


//      第x号菜的价格  =================
        double new_price = 0;
        MyIterator iterator = aggregate.iterator();
        while (iterator.hasNext()) {
            if (iterator.next().getId() == x) {
                new_price = iterator.next().getPrice();
                break;
            }
        }
//        =================

        DoUpdate doUpdate = new DoUpdate();
        doUpdate.doFactory("INSERT INTO `order`(`id`, `table_id`, `menu_id`, `status`) VALUES (0," + y + "," + x + ",'未上菜')");
        DoSelect doSelect = new DoSelect();
        ResultSet re = (ResultSet) doSelect.doFactory(" SELECT * FROM `invoicing` WHERE table_id = " + y);
        if (re.next() == false) {
            doUpdate.doFactory("INSERT INTO `invoicing`(`id`, `table_id`, `money`, `status`) VALUES (0," + y + "," + new_price + ",'未结账')");
        } else {//先点过菜了
            doUpdate.doFactory("UPDATE `invoicing` SET `money`= money + " + new_price + " WHERE `table_id`=" + y);
        }
        System.out.println("点菜成功,请继续操作......");
    }
}
package Facade;

import entity.Invoicing;
import entity.Menu;
import factory.DoSelect;
import factory.DoUpdate;
import singleton.ScannerSingle;

import java.sql.ResultSet;
import java.sql.SQLException;

public class F3 implements F {

    @Override
    public void f() throws SQLException {

        System.out.println("######请输入您的餐桌号:");
        int x = ScannerSingle.getScanner().nextInt();

        Invoicing invoicing = null;
        ResultSet resultSet = (ResultSet) new DoSelect().doFactory("SELECT `id`, `table_id`, `money`, `status` FROM `invoicing` WHERE `table_id`=" + x);
        while (resultSet.next()) {

            int id = resultSet.getInt("id");
            int table_id = resultSet.getInt("table_id");
            double money = resultSet.getDouble("money");
            String status = resultSet.getString("status");
            invoicing = new Invoicing(id, table_id, money, status);
        }
        if (invoicing.getStatus().equals("已结账")) {
            System.out.println("您已结账,请勿重新结账");
        } else {
            new DoUpdate().doFactory("UPDATE `invoicing` SET `status`= '已结账' WHERE `table_id`=" + x);
            System.out.println("###您共计消费 " + invoicing.getMoney() + " 元,已成功结账");
        }
    }
}
package Facade;

import Iterator.Aggregate;
import Iterator.ConcreteAggregate;
import Iterator.MyIterator;
import entity.Invoicing;
import entity.Order;
import factory.DoSelect;
import singleton.ScannerSingle;

import java.sql.ResultSet;
import java.sql.SQLException;

public class F4 implements F {

    @Override
    public void f() throws SQLException {
        Aggregate aggregate = new ConcreteAggregate<>();

        System.out.println("######请输入您的餐桌号:");
        int x = ScannerSingle.getScanner().nextInt();

        Invoicing invoicing = null;
        ResultSet resultSet = (ResultSet) new DoSelect().doFactory("SELECT order.id as id, `table_id`, `menu_id`, `status`,`name` FROM `order`,`menu` WHERE `table_id`=" + x + " and order.menu_id=menu.id");

        while (resultSet.next()) {

            int id = resultSet.getInt("id");
            int table_id = resultSet.getInt("table_id");
            int menu_id = resultSet.getInt("menu_id");
            String status = resultSet.getString("status");
            String name = resultSet.getString("name");

            aggregate.add(new Order(id,table_id,menu_id,status,name));
        }

        MyIterator iterator = aggregate.iterator();
        System.out.println("####信息如下:");
        while (iterator.hasNext()) {
            Order order = iterator.next();
            System.out.println("餐桌号:" + order.getTable_id() + "  菜名:" + order.getName() + "  " + order.getStatus());
        }
        System.out.println();
    }
}
package com;

import Facade.F1;
import Facade.F2;
import Facade.F3;
import Facade.F4;
import singleton.ScannerSingle;

import java.sql.SQLException;

/**
 *  外观模式
 */
public class Menu {

    public void menu() throws SQLException {
        System.out.println("*************************************************");
        System.out.println("*                   餐厅点餐系统                  *");
        System.out.println("*************************************************");
        System.out.println("*******     1.预定餐桌                    ********");
        System.out.println("*******     2.点菜                       ********");
        System.out.println("*******     3.结账                       ********");
        System.out.println("*******     4.查看订单                    ********");
        System.out.println("*******     0.退出                       ********");
        System.out.println("*************************************************");
        System.out.println("----请按数字选择:");
        int x = ScannerSingle.getScanner().nextInt();
        switch (x){
            case 1:
                new F1().f();menu();break;
            case 2:
                new F2().f();menu();break;
            case 3:
                new F3().f();menu();break;
            case 4:
                new F4().f();menu();break;
        }
    }
}
package com;

import java.sql.SQLException;

public class Main {

    public static void main(String[] args) throws SQLException {
        new Menu().menu();
    }

}

外观:F

子系统:F1  F2 F3 F4

客户:Menu