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
- java设计模式进阶_intercepting-filter
- Java进阶-设计模式
- java设计模式进阶_singleton
- java设计模式进阶_prototype
- java设计模式进阶_builder
- java设计模式进阶_decorator
- java设计模式进阶_strategy
- java设计模式进阶_visitor
- java设计模式进阶_flyweight
- java设计模式进阶_proxy
- java设计模式进阶_facade
- java设计模式进阶_composite
- java设计模式进阶_bridge
- java设计模式进阶_adapter
- java设计模式进阶_interpreter
- java设计模式进阶_mediator
- java设计模式进阶_chain
- java设计模式进阶_iterator
- Retrofit Token过期自动刷新并重新请求接口
- 阿里秒级android增量编译工具freeLine的使用入门
- Url参数中出现+、空格、=、%、&、#等字符的解决办法
- 关于RPC
- tensorflow compile
- java设计模式进阶_intercepting-filter
- Spring连接多个数据源
- 搭建一个android项目的准备工作
- IntelliJ IDEA+JetBrains WebStorm )+JetBrains PhpStorm +JetBrains(2016.2)版本的破解方法总结
- linux 平台下 postgres 使用 (安装 启动 关闭 数据备份 还原)
- spring rabbitmq 消息确认机制和事务支持
- MFC CString 和int相互转化
- vue.js学习笔记(相关概念)
- IOS 拍照上传图片, 出错: 413 Request Entity Too Large