java设计模式进阶_intercepting-filter

这里写图片描述

//
//
//  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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值