呆羊在曬太陽 |
|
|||
公告
日歷
統(tǒng)計
導航常用鏈接留言簿(7)隨筆分類(158)
文章分類(2)相冊log搜索積分與排名
最新評論
閱讀排行榜
|
1. 簡介和簡單的實現(xiàn) Class IAdaptable
public interface IAdaptable { public Object getAdapter(Class clazz); } Class ListAdapter public class ListAdapter extends ArrayList implements IAdaptable { public Object getAdapter(Class clazz) { if(clazz == Vector.class){ Vector v = new Vector(this.size()); v.addAll(this); return v; } return null; } }
ListAdapter list = new ListAdapter();
Vector v = (Vector) list.getAdapter(Vector.class);
看看代碼: Class person
public class Person { private String name = "name"; private String age = "23"; private String sex = "male"; public Person(String name){ this.setName(name); } public String getName() { return name; } public void setName(String name) { this.name = name; } …… } UI類的部分代碼: { table = new JTable(); this.getContentPane().add(table); table.setBounds(218, 2, 171, 248); } { ComboBoxModel jComboBox1Model = new DefaultComboBoxModel( new Object[] { new Person("rEloaD"), new Person("b") }); comboBox = new JComboBox(); this.getContentPane().add(comboBox); comboBox.setModel(jComboBox1Model); comboBox.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ JComboBox comboBox =(JComboBox)e.getSource(); Person p = (Person)comboBox.getSelectedItem(); TableModel jTable1Model = new DefaultTableModel( new String[][] { { "Name", p.getName() }, { "Sex", p.getSex() }, { "Age", p.getAge() }}, new String[] { "Column 1", "Column 2" }); table.setModel(jTable1Model); } }); }
JComboBox comboBox =(JComboBox)e.getSource(); Object obj = comboBox.getSelectedItem(); TableModel jTable1Model = null; if(obj instanceof Person){ jTable1Model = new DefaultTableModel( new String[][] { { "Name", ((Person)obj).getName() }, { "Sex", ((Person)obj).getSex() }, { "Age", ((Person)obj).getAge() }}, new String[] { "Column 1", "Column 2" }); } if(obj instanceof Product){ jTable1Model = new DefaultTableModel( new String[][] { { "Name", ((Product)obj).name }, { "price", ((Product)obj).price }, { "quantity", ((Product)obj).quantity }}, new String[] { "Column 1", "Column 2" }); } table.setModel(jTable1Model);
后來我感覺ActionListener代碼有一些凌亂,又封裝了一個Builder類,讓它創(chuàng)建TableModel: public static TableModel modelBuilder(Object obj){
TableModel jTable1Model = null; if(obj instanceof Person){ jTable1Model = new DefaultTableModel( new String[][] { { "Name", ((Person)obj).getName() }, { "Sex", ((Person)obj).getSex() }, { "Age", ((Person)obj).getAge() }}, new String[] { "Column 1", "Column 2" }); } if(obj instanceof Product){ jTable1Model = new DefaultTableModel( new String[][] { { "Name", ((Product)obj).name }, { "price", ((Product)obj).price }, { "quantity", ((Product)obj).quantity }}, new String[] { "Column 1", "Column 2" }); } return jTable1Model; } 我對自己的代碼還算滿意,至少目前能用了。 JComboBox comboBox =(JComboBox)e.getSource();
Object obj = comboBox.getSelectedItem(); TableModel jTable1Model = null; if(obj instanceof IAdaptable){ jTable1Model = (TableModel) ((IAdaptable)obj).getAdapter(TableModel.class); } table.setModel(jTable1Model); 然后分別讓Person和Product實現(xiàn)IAdaptable接口: Class Person:
public class Person implements IAdaptable{ ….. public Object getAdapter(Class clazz) { if(clazz == TableModel.class){ return new DefaultTableModel( new String[][] { { "Name", getName() }, { "Sex", getSex() }, { "Age", getAge() }}, new String[] { "Column 1", "Column 2" }); } return null; } } Class Product public class Product implements IAdaptable{ …… public Object getAdapter(Class clazz) { if(clazz == TableModel.class){ return new DefaultTableModel( new String[][] { { "Name", getName() }, { "Sex", getSex() }, { "Age", getAge() }}, new String[] { "Column 1", "Column 2" }); } return null; } } 其實我們的代碼量并沒有任何的改變,前后都是一樣的。
public interface IAdaptableFactory {
public Object getAdapter(Object adapter,Class clazz); }
public interface IAdaptableManager {
public Object getAdapter(Object adapter,Class clazz); public boolean registerAdapters (Class clazz,IAdaptableFactory factory); }
Class AdaptableFactoryImpl
public class AdaptableFactoryImpl implements IAdaptableFactory { public Object getAdapter(Object adapter, Class clazz) { if(adapter instanceof Product){ if(clazz ==TableModel.class){ return new DefaultTableModel( new String[][] { { "Name",((Product)adapter).name }, { "price", ((Product)adapter).price }, { "quantity", ((Product)adapter).quantity }}, new String[] { "Column 1", "Column 2" }); } } return null; } public Class[] getAdapterList() { return new Class[]{TableModel.class}; } } Class AdapterManagerImpl: public class AdapterManagerImpl implements IAdaptableManager { private static AdapterManagerImpl instance = null; private Hashtable table = new Hashtable(); private AdapterManagerImpl(){} public Object getAdapter(Object adapter, Class clazz) { Object factory = table.get(adapter.getClass()); if(factory != null){ return ((IAdaptableFactory)factory).getAdapter(adapter,clazz); } return null; } public boolean registerFacotry(Class clazz, IAdaptableFactory factory) { try{ table.put(clazz,factory); return true; }catch(Exception e){ return false; } } public synchronized static AdapterManagerImpl getInstance() { if(instance == null) instance = new AdapterManagerImpl(); return instance; } }
JComboBox comboBox = (JComboBox) e.getSource();
Object obj = comboBox.getSelectedItem(); TableModel jTable1Model = null; if (obj instanceof IAdaptable) { jTable1Model = (TableModel) ((IAdaptable) obj) .getAdapter(TableModel.class); } else { jTable1Model = (TableModel) AdapterManagerImpl .getInstance().getAdapter(obj, TableModel.class); } table.setModel(jTable1Model);
posted on 2005-11-26 01:52 Dart http://www.aygfsteel.com/reloadcn/archive/2005/11/26/eclipsedesignpattern1.html
|
![]() |
|
Copyright © 小叉 | Powered by: 博客園 模板提供:滬江博客 |