我一直认为,编程是我们大脑中解决问题的逻辑思维过程的语言描述,而与这种逻辑思维最相关的应该是其背后的数学逻辑。我相信很多编程问题虽然表面看千差万别,但是其背后隐含的数学本质和编程方法一定是相似的,将这一类问题的数学本质和编程方法抽象出来,就可以形成一类问题的模式。我希望在以后的编程中,遇到问题能够看出其背后的本质, 然后归纳概括出一些有用的模式。
模式一,梯度恒等模式。
该模式主要用到的是函数的映射思想,我发现在编程的过程中,映射的思想用得非常的多,例如,图形界面中的复选框的选择值映射成我们保存的一个有用的线性表或链表的下标值。
import java.awt.BorderLayout; import java.awt.GridLayout; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; import javax.swing.SwingConstants; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; /** * 思想 映射的思想。 也就是通过selcet 获得自变量x的取值, 对应于修改数组中的图片情况, 然后把这个图片情况映射到面板上。 * 分析, 在程序设计中, 设计很多映射 ,而这种映射往往都是以一一恒等的映射, 背后的因变量往往就是我们需要维护的数据结构。这种模式成为 一一映射模式。 * @author Neuclil * */ public class ListDemo extends JFrame{ /** * @param args */ final int NUMBER_OF_FALGS = 9; private String[] flagTitles = {"Canada", "China", "Denmark", "France", "Germany", "India", "Norway", "United Kindgom", "United States of America"}; private JList jlist = new JList(flagTitles); private ImageIcon[] imageIcons = { new ImageIcon("E:/MyEclipse空间/image/ca.gif"), new ImageIcon("E:/MyEclipse空间/image/china.gif"), new ImageIcon("E:/MyEclipse空间/image/denmark.gif"), new ImageIcon("E:/MyEclipse空间/image/fr.gif"), new ImageIcon("E:/MyEclipse空间/image/germany.gif"), new ImageIcon("E:/MyEclipse空间/image/india.gif"), new ImageIcon("E:/MyEclipse空间/image/norway.gif"), new ImageIcon("E:/MyEclipse空间/image/uk.gif"), new ImageIcon("E:/MyEclipse空间/image/us.gif") }; private JLabel[] jlblImageViewer = new JLabel[NUMBER_OF_FALGS]; public ListDemo(){ JPanel p = new JPanel(new GridLayout(3,3,5,5)); jlist.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); for(int i = 0; i<NUMBER_OF_FALGS; i++){ p.add(jlblImageViewer[i] = new JLabel()); jlblImageViewer[i].setHorizontalAlignment(SwingConstants.CENTER); } add(p, BorderLayout.CENTER); add(new JScrollPane(jlist), BorderLayout.WEST); this.setLocationRelativeTo(null); this.setSize(650,500); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); jlist.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { // TODO Auto-generated method stub int[] indices = jlist.getSelectedIndices(); int i; for(i = 0; i < indices.length; i++){ jlblImageViewer[i].setIcon(imageIcons[indices[i]]); } for(;i<NUMBER_OF_FALGS;i++){ jlblImageViewer[i].setIcon(null); } } }); } public static void main(String[] args) { // TODO Auto-generated method stub ListDemo listDemo = new ListDemo(); } }