java设计模式进阶_intercepting-filter

来源:互联网 发布:怎样做网络宣传 编辑:程序博客网 时间:2024/05/18 11:49

这里写图片描述

//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : Filter.java//  @ Date : 2016/9/5//  @ Author : /////** * Filter interface Filters perform certain tasks prior or after execution of * request by request handler.In this case,before the request is handled by * the target,the request undergoes through each Filter * */public interface Filter {    /**     * Execute order processing filter.     * @param order      * @return empty string on success,otherwise error message.     */    public String execute(Order order);    /**     * Set next filter in chain after this.     * @param filter     */    public void setNext(Filter filter);    /**     * Get next filter in chain after this.     * @return     */    public Filter getNext();    /**     * Get last filter in the chain.     * @return     */    public Filter getLast();}//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : AbstractFilter.java//  @ Date : 2016/9/5//  @ Author : /////** * Base class for order processing filters. * Handles chain management. * */public abstract class AbstractFilter implements Filter {    private Filter next;    public AbstractFilter() {}    public AbstractFilter(Filter next) {        this.next = next;    }    public Filter getNext(){        return next;    }    public void setNext(Filter next){        this.next = next;    }    public Filter getLast(){        Filter last = this;        while(last.getNext() != null)        {            last = last.getNext();        }        return last;    }    @Override    public String execute(Order order) {        if(getNext() != null)            return getNext().execute(order);        else            return "";    }}//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : ContactFilter.java//  @ Date : 2016/9/5//  @ Author : /////** * Concrete implementation of filter * This filter checks for the contact field in which it checks of the input consist of numbers * and it also checks if the input follows the length constraint (11 digits) * */public class ContactFilter extends AbstractFilter {    public String execute(Order order) {        String result = super.execute(order);        if(order.getContactNumber() == null             || order.getContactNumber().isEmpty()            || order.getContactNumber().matches(".*[^\\d]+.*")            || order.getContactNumber().length() != 11){            return result + "Invalid contact number! ";        } else {            return result;        }    }}//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : DepositFilter.java//  @ Date : 2016/9/5//  @ Author : /////** * Concrete implementation of filter * This checks for the deposit code * */public class DepositFilter extends AbstractFilter {    public String execute(Order order) {        String result = super.execute(order);        if(order.getDepositNumber() == null || order.getDepositNumber().isEmpty())        {            return result + "Invalid deposit number! ";        } else {            return result;        }    }}//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : OrderFilter.java//  @ Date : 2016/9/5//  @ Author : /////** * Concrete implementation of filter This checks for the order field */public class OrderFilter extends AbstractFilter {    public String execute(Order order) {        String result = super.execute(order);        if(order.getOrder() == null || order.getOrder().isEmpty())        {            return result + "Invalid order! ";        } else {            return result;        }    }}//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : AddressFilter.java//  @ Date : 2016/9/5//  @ Author : /////** * Concrete implementation of filter * This filter is responsible for checking/filtering the input in the address field. * */public class AddressFilter extends AbstractFilter {    public String execute(Order order) {        String result = super.execute(order);        if(order.getAddress() == null || order.getAddress().isEmpty())        {            return result + "Invalid address! ";        } else {            return null;        }    }}//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : NameFilter.java//  @ Date : 2016/9/5//  @ Author : /////** * Concrete implementation of filter This filter checks if the input in the Name * field is valid.(alphanumeric) * */public class NameFilter extends AbstractFilter {    public String execute(Order order) {        String result = super.execute(order);        if(order.getName() == null || order.getName().isEmpty() || order.getName().matches(".*[^\\w|\\s]+.*"))        {            return result + "Invalid order!";        } else {            return result;        }    }}//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : Order.java//  @ Date : 2016/9/5//  @ Author : ////public class Order {    private String name;    private String contactNumber;    private String address;    private String depositNumber;    private String order;    public Order() {}    public Order(String name, String contactNumber, String address, String depositNumber, String order) {        this.name = name;        this.contactNumber = contactNumber;        this.address = address;        this.depositNumber = depositNumber;        this.order = order;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getContactNumber() {        return contactNumber;    }    public void setContactNumber(String contactNumber) {        this.contactNumber = contactNumber;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    public String getDepositNumber() {        return depositNumber;    }    public void setDepositNumber(String depositNumber) {        this.depositNumber = depositNumber;    }    public String getOrder() {        return order;    }    public void setOrder(String order) {        this.order = order;    }}//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : FilterChain.java//  @ Date : 2016/9/5//  @ Author : ////public class FilterChain {    private Filter chain;    private final Target target;    public FilterChain(Target target) {        this.target = target;    }    public void addFilter(Filter filter) {        if(chain == null)            chain = filter;        else            chain.getLast().setNext(filter);    }    public String execute(Order order) {        if(chain != null){            return chain.execute(order);        } else             return "RUNNING...";    }}//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : FilterManager.java//  @ Date : 2016/9/5//  @ Author : ////public class FilterManager {    private FilterChain filterChain;    public FilterManager(Target target) {        filterChain = new FilterChain(target);    }    public void addFilter(Filter filter) {        filterChain.addFilter(filter);    }    public String filterRequest(Order order) {        return filterChain.execute(order);    }}import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JRootPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.SwingUtilities;//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : Client.java//  @ Date : 2016/9/5//  @ Author : ////public class Client extends JFrame {    /**     *      */    private static final long serialVersionUID = 5940738358347108291L;    private FilterManager filterManager;    private JLabel jl;    private JTextField[] jtFields;    private JTextArea[] jtAreas;    private JButton clearButton;    private JButton processButton;    public Client() {        super("Client System");        setDefaultCloseOperation(EXIT_ON_CLOSE);        setSize(300, 300);        jl = new JLabel("RUNNING...");        jtFields = new JTextField[3];        for (int i = 0; i < 3; i++) {            jtFields[i] = new JTextField();        }        jtAreas = new JTextArea[2];        for (int i = 0; i < 2; i++) {            jtAreas[i] = new JTextArea();        }        clearButton = new JButton("Clear");        processButton = new JButton("Process");        setup();    }    private void setup() {        setLayout(new BorderLayout());        JPanel panel = new JPanel();        add(jl, BorderLayout.SOUTH);        add(panel, BorderLayout.CENTER);        panel.setLayout(new GridLayout(6, 2));        panel.add(new JLabel("Name"));        panel.add(jtFields[0]);        panel.add(new JLabel("Contact Number"));        panel.add(jtFields[1]);        panel.add(new JLabel("Address"));        panel.add(jtAreas[0]);        panel.add(new JLabel("Deposit Number"));        panel.add(jtFields[2]);        panel.add(new JLabel("Order"));        panel.add(jtAreas[1]);        panel.add(clearButton);        panel.add(processButton);        clearButton.addActionListener(new ActionListener() {            @Override            public void actionPerformed(ActionEvent e) {                for (JTextArea i : jtAreas) {                    i.setText("");                }                for (JTextField i : jtFields) {                    i.setText("");                }            }        });        processButton.addActionListener(new ActionListener() {            @Override            public void actionPerformed(ActionEvent e) {                Order order = new Order(jtFields[0].getText(), jtFields[1]                        .getText(), jtAreas[0].getText(),                        jtFields[2].getText(), jtAreas[1].getText());                jl.setText(sendRequest(order));            }        });        JRootPane rootPane = SwingUtilities.getRootPane(processButton);        rootPane.setDefaultButton(processButton);        setVisible(true);    }    public void setFilterManager(FilterManager filterManager) {        this.filterManager = filterManager;    }    public String sendRequest(Order order) {        return filterManager.filterRequest(order);    }}import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JRootPane;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.SwingUtilities;import javax.swing.table.DefaultTableModel;//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : Target.java//  @ Date : 2016/9/5//  @ Author : ////public class Target extends JFrame {    private static final long serialVersionUID = 1404005204378123519L;    private JTable jt;    private JScrollPane jsp;    private DefaultTableModel dtm;    private JButton del;    public Target(){        super("Order System");        setDefaultCloseOperation(EXIT_ON_CLOSE);        setSize(640,480);        dtm = new DefaultTableModel(new Object[]{"Name", "Contact Number",                "Address", "Deposit Number", "Order"},0);        jt = new JTable(dtm);        del = new JButton("Delete");        setup();    }    private void setup() {        setLayout(new BorderLayout());        JPanel bot = new JPanel();        add(jt.getTableHeader(),BorderLayout.NORTH);        bot.setLayout(new BorderLayout());        bot.add(del,BorderLayout.EAST);        add(bot,BorderLayout.SOUTH);        jsp = new JScrollPane(jt);        jsp.setPreferredSize(new Dimension(500,250));;        add(jsp,BorderLayout.CENTER);        del.addActionListener(new DListener());        JRootPane rootPane = SwingUtilities.getRootPane(del);        rootPane.setDefaultButton(del);        setVisible(true);    }    public void execute(String[] request) {        dtm.addRow(new Object[]{                request[0],request[1],request[2],request[3],request[4]        });    }    private class DListener implements ActionListener    {        @Override        public void actionPerformed(ActionEvent e) {            int temp = jt.getSelectedRow();            if(temp == -1)                return ;            int temp2 = jt.getSelectedRowCount();            for(int i = 0;i < temp2; i++)            {                dtm.removeRow(temp);            }        }    }}/** * This is an app that checks whether the order request is valid through pre-processing done via Filters * Each field has its own corresponding Filter * */public class App {    public static void main(String[] args) {        FilterManager filterManager = new FilterManager(new Target());        filterManager.addFilter(new NameFilter());        filterManager.addFilter(new ContactFilter());        filterManager.addFilter(new AddressFilter());        filterManager.addFilter(new DepositFilter());        filterManager.addFilter(new OrderFilter());        Client client = new Client();        client.setFilterManager(filterManager);    }}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 买车时谈的协议与合同不一致怎么办 新车上牌找不到流水号怎么办 开票数量比入库数量少怎么办 我贷款的app忘了怎么办 网贷名字忘了怎么办 附件太大邮件发不出去怎么办 孩子出生足印单子丢了怎么办 保险名字写错了怎么办 行驶证和身份证名字不一样怎么办 上户后发现合格证和车不一样怎么办 新车上户重量不一样怎么办 医保卡和身份证名字不一样怎么办 保险标志保险卡都没给怎么办 新买的电动自行车不符合标准怎么办 电费的户号12位怎么办? 买到过期的药品怎么办 淘宝代销宝贝信息不全怎么办 en和eng读不明显怎么办 快递收件人填错手机号没收到怎么办 快递收件人电话写错了怎么办 收件人电话写错了怎么办 大货要出货了数量错误怎么办 手被烫伤留疤怎么办 cbg被下单不能改价怎么办 浪琴手表日期中午跳怎么办 社保一体卡丢失了怎么办 京东付款七天不发货怎么办 电动车电机锁钥匙丢了怎么办 电瓶车锁钥匙丢了怎么办 苹果平板ld忘了怎么办 平板版本太低6.0怎么办 ios平板版本太低怎么办 微信公众号重名怎么办 发票规格型号填错了怎么办 鲁大师检测硬盘有问题怎么办 英文成绩单翻译错了怎么办 川航订机票名字写错了怎么办 亚航电子登机牌没有保存怎么办 cfa考试准考证名字有错怎么办 火车票护照号错了怎么办 国际机票名字错一个字怎么办