1.类图:
2.案例实现:模仿idea软件更换界面主题。实现抽象工厂方法,让Jpanel和Jbutton更换颜色,单击红色按钮换红色,但是蓝色按钮换蓝色。
3.代码:
Button接口:
package com.factory;
import java.awt.*;
public interface Buttoncolor {
public Color setButton();
}
Jpanel接口:
package com.factory;
import java.awt.*;
public interface Jpanlecolor {
public Color setJpanlcolor();
}
Factory接口:
package com.factory;
import java.awt.*;
public interface Factory {
public Color b();
public Color j();
}
红色按钮:
package com.factory;
import java.awt.*;
public class RedButton implements Buttoncolor{
@Override
public Color setButton() {
return Color.red;
}
}
蓝色按钮:
package com.factory;
import java.awt.*;
public class BuleFactory implements Factory{
@Override
public Color b() {
return new BlueButton().setButton();
}
@Override
public Color j() {
return new BlueJpanel().setJpanlcolor();
}
}
红色面板:
package com.factory;
import java.awt.*;
public class Redpanel implements Jpanlecolor{
@Override
public Color setJpanlcolor() {
return Color.red;
}
}
蓝色的面板:
package com.factory;
import java.awt.*;
public class BlueJpanel implements Jpanlecolor{
@Override
public Color setJpanlcolor() {
return Color.BLUE;
}
}
红色工厂:
package com.factory;
import java.awt.*;
public class RedFactory implements Factory{
@Override
public Color b() {
return new RedButton().setButton();
}
@Override
public Color j() {
return new Redpanel().setJpanlcolor();
}
}
蓝色的工厂:
package com.factory;
import java.awt.*;
public class BuleFactory implements Factory{
@Override
public Color b() {
return new BlueButton().setButton();
}
@Override
public Color j() {
return new BlueJpanel().setJpanlcolor();
}
}
测试:
package UI;
import com.factory.BlueJpanel;
import com.factory.BuleFactory;
import com.factory.RedFactory;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class myFream extends JFrame {
static JButton jButton;
static JButton jButton2;
static JButton jButton3;
public static void main(String[] args) {
JFrame jFrame=new JFrame("测试");
jFrame.setSize(1000,500);
jFrame.setLocation(500,500);
JPanel jPanel=new JPanel();
jPanel.setSize(500,500);
jPanel.setBackground(Color.white);
jButton=new JButton();
JLabel jLabel=new JLabel("我是按钮");
JLabel jLabel2=new JLabel("我是PANEL");
jButton.add(jLabel);
jPanel.add(jLabel2);
jFrame.add(jPanel);
jFrame.add(jButton);
jFrame.setVisible(true);
jButton2=new JButton("红色按钮");
jButton2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jPanel.setBackground(new RedFactory().j());
jButton.setBackground(new RedFactory().b());
}
});
jButton3=new JButton("蓝色按钮");
jButton3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jPanel.setBackground(new BuleFactory().j());
jButton.setBackground(new BuleFactory().b());
}
});
jFrame.add(jButton2);
jFrame.add(jButton3);
jFrame.setLayout(new FlowLayout());
}
}
点击红色按钮:
点击蓝色按钮: