Я изучаю шаблон Factory, и у меня есть некоторые сомнения относительно того, какой из них является лучшим способом его создания. Я разработал две прогамы, которые делают точно то же самое, единственное отличие - это код, который реализует данный шаблон. После сравнения я могу найти:Использование Factory Pattern в Java
- Код, который лучше подходит для повторного использования, для JVM, для производительности и т. Д., Номер 1 или 2?
- Является ли оптимальный способ 3.er сделать еще больше?
Общие классы
Исполнитель
public class ArtistFrame extends AbstractFactoryJInternalFrame {
public ArtistFrame(String title, int x, int y) {
super(title, x, y);
}
@Override
void makeButtons() {
JButton addBtn = new JButton("Add");
addBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
//to do
}
});
JButton saveBtn = new JButton("Save");
saveBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
//to do
}
});
JButton deleteBtn = new JButton("Delete");
deleteBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
//to do
}
});
JButton cancelBtn = new JButton("Cancel");
cancelBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
//to do
}
});
add(addBtn, BorderLayout.SOUTH);
add(saveBtn, BorderLayout.NORTH);
add(deleteBtn, BorderLayout.EAST);
add(cancelBtn, BorderLayout.WEST);
}
}
Трек
public class TrackFrame extends AbstractFactoryJInternalFrame {
public TrackFrame(String title, int x, int y) {
super(title, x, y);
}
@Override
void makeButtons() {
JButton addBtn = new JButton("Add");
addBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
//to do
}
});
JButton saveBtn = new JButton("Save");
saveBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
//to do
}
});
JButton deleteBtn = new JButton("Delete");
deleteBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
//to do
}
});
JButton cancelBtn = new JButton("Cancel");
cancelBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
//to do
}
});
add(addBtn, BorderLayout.NORTH);
add(saveBtn, BorderLayout.CENTER);
add(deleteBtn, BorderLayout.EAST);
add(cancelBtn,BorderLayout.WEST);
}
}
Альбом
public class AlbumFrame extends AbstractFactoryJInternalFrame {
public AlbumFrame(String title, int x, int y) {
super(title, x, y);
}
@Override
void makeButtons() {
JButton addBtn = new JButton("Add");
addBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
//to do
}
});
JButton saveBtn = new JButton("Save");
saveBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
//to do
}
});
JButton deleteBtn = new JButton("Delete");
deleteBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
//to do
}
});
JButton cancelBtn = new JButton("Cancel");
cancelBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
//to do
}
});
add(addBtn, BorderLayout.EAST);
add(saveBtn, BorderLayout.WEST);
add(deleteBtn, BorderLayout.NORTH);
add(cancelBtn, BorderLayout.SOUTH);
}
}
Случай 1
Главного класс
public class TestSwing extends JFrame {
JDesktopPane desktop;
AbstractFactoryJInternalFrame artistFrame;
AbstractFactoryJInternalFrame albumFrame;
AbstractFactoryJInternalFrame trackFrame;
public TestSwing() {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(500,300);
desktop = new JDesktopPane();
artistFrame = AbstractFactoryJInternalFrame.getFrame("Artist",10,10);
albumFrame = AbstractFactoryJInternalFrame.getFrame("Album", 20, 20);
trackFrame = AbstractFactoryJInternalFrame.getFrame("Track", 30,30);
desktop.add(artistFrame);
desktop.add(albumFrame);
desktop.add(trackFrame);
setContentPane(desktop);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
TestSwing ts = new TestSwing();
}
});
}
}
Фабрика класс общественный абстрактный класс AbstractFactoryJInternalFrame расширяет JInternalFrame {
protected AbstractFactoryJInternalFrame(String title, int x, int y) {
super(title, true, true, true, true);
setLocation(y,y);
}
public static AbstractFactoryJInternalFrame getFrame(String title, int x, int y) {
AbstractFactoryJInternalFrame frame = null;
if (title.equals("Artist")) {
frame = new ArtistFrame(title, x, y);
} else if (title.equals("Album")) {
frame = new AlbumFrame(title, x, y);
} else {
frame = new TrackFrame(title, x, y);
}
frame.makeButtons();
frame.pack();
frame.setVisible(true);
return frame;
}
abstract void makeButtons();
}
Случая 2
Main Class
public class TestSwing extends JFrame {
JDesktopPane desktop;
AbstractFactoryJInternalFrame artistFrame;
AbstractFactoryJInternalFrame albumFrame;
AbstractFactoryJInternalFrame trackFrame;
public TestSwing() {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(500,300);
desktop = new JDesktopPane();
artistFrame = new ArtistFrame("Arist",10,10);
albumFrame = new AlbumFrame("Album", 20, 20);
trackFrame = new TrackFrame("Track", 30,30);
desktop.add(artistFrame);
desktop.add(albumFrame);
desktop.add(trackFrame);
setContentPane(desktop);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
TestSwing ts = new TestSwing();
}
});
}
}
Класс фабрики
public abstract class AbstractFactoryJInternalFrame extends JInternalFrame {
protected AbstractFactoryJInternalFrame(String title, int x, int y) {
super(title, true, true, true, true);
setLocation(y,y);
makeButtons();
pack();
setVisible(true);
}
abstract void makeButtons();
}
Это является слишком много кода. Пожалуйста, опубликуйте [SSCCE] (http://sscce.org). – Doorknob
в todo идут конкретные операции crud для каждого объекта. В следующий раз, когда я думаю о слишком большом коде –
, это только и пример, но это стек для выпуска выпуска –