面向对象的设计模式

用户头像
WW
关注
发布于: 2020 年 06 月 25 日

1.手写单例模式

2.组合模式

2.1 自定义组件接口

/**
* 自定义组件接口
*/
public interface Component {
/**打印*/
public void printName();
/**添加子组件*/
public void addChild(Component child);
}

2.2 按钮组件

import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
/**
* 按钮组件
* 继承Swing的JButton并实现自定义组件接口
*/
public class MyJButton extends JButton implements Component{
private static final long serialVersionUID = 1L;
private String name = null;
List<Component> childComponents = new ArrayList<Component>();
public MyJButton(String printStr,String title){
super(title);
this.name = printStr;
}
public void printName() {
// 先把自己输出
System.out.println("print " + name);
// 如果还包含其他子组件,那么就输出这些子组件对象
if (null != childComponents) {
// 输出当前对象的子组件对象
for (Component component : childComponents) {
// 递归地进行子组件相应方法的调用,输出每个子组件对象
component.printName();
}
}
}
@Override
public void addChild(Component child) {
childComponents.add(child);
}
}

2.3 复选框组件

import java.util.ArrayList;
import java.util.List;
import javax.swing.JCheckBox;
/**
* 复选框组件
* 继承Swing的JCheckBox并实现自定义组件接口
*/
public class MyJCheckBox extends JCheckBox implements Component{
private static final long serialVersionUID = 1L;
private String name = null;
List<Component> childComponents = new ArrayList<Component>();
public MyJCheckBox(String printStr,String title){
super(title);
this.name = printStr;
}
public void printName() {
// 先把自己输出
System.out.println("print " + name);
// 如果还包含其他子组件,那么就输出这些子组件对象
if (null != childComponents) {
// 输出当前对象的子组件对象
for (Component component : childComponents) {
// 递归地进行子组件相应方法的调用,输出每个子组件对象
component.printName();
}
}
}
@Override
public void addChild(Component child) {
childComponents.add(child);
}
}

2.4 Frame组件

import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
/**
* Frame组件
* 继承Swing的JFrame并实现自定义组件接口
*/
public class MyJFrame extends JFrame implements Component{
private static final long serialVersionUID = 1L;
private String name = null;
private String position = null;
List<Component> childComponents = new ArrayList<Component>();
public MyJFrame(String printStr,String title){
super(title);
this.name = printStr;
}
public void printName() {
if(name != null){
// 先把自己输出
System.out.println("print " + name);
}
// 如果还包含其他子组件,那么就输出这些子组件对象
if (null != childComponents) {
// 输出当前对象的子组件对象
for (Component component : childComponents) {
// 递归地进行子组件相应方法的调用,输出每个子组件对象
component.printName();
}
}
}
@Override
public void setVisible(boolean b) {
super.setVisible(b);
this.printName();
}
@Override
public void addChild(Component child) {
super.add((java.awt.Component)child,position);
childComponents.add(child);
}
public void addChildren(Component child,String position) {
this.position = position;
addChild(child);
}
}

2.5 Label组件

import java.util.ArrayList;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
/**
* Label组件
* 继承Swing的JLabel并实现自定义组件接口
*/
public class MyJLabel extends JLabel implements Component{
private static final long serialVersionUID = 1L;
private String name = null;
List<Component> childComponents = new ArrayList<Component>();
public MyJLabel(String printStr,String title){
super(title);
this.name = printStr;
}
public MyJLabel(String printStr,ImageIcon imageIcon) {
super(imageIcon);
this.name = printStr;
}
public void printName() {
// 先把自己输出
System.out.println("print " + name);
// 如果还包含其他子组件,那么就输出这些子组件对象
if (null != childComponents) {
// 输出当前对象的子组件对象
for (Component component : childComponents) {
// 递归地进行子组件相应方法的调用,输出每个子组件对象
component.printName();
}
}
}
@Override
public void addChild(Component child) {
childComponents.add(child);
}
}

2.6 panel组件

import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel;
/**
* panel组件
* 继承Swing的JPanel并实现自定义组件接口
*/
public class MyJPanel extends JPanel implements Component{
private static final long serialVersionUID = 1L;
private String name = null;
List<Component> childComponents = new ArrayList<Component>();
public MyJPanel(){
super();
}
public MyJPanel(String printStr){
super();
this.name = printStr;
}
public void printName() {
if(name != null){
// 先把自己输出
System.out.println("print " + name);
}
// 如果还包含其他子组件,那么就输出这些子组件对象
if (null != childComponents) {
// 输出当前对象的子组件对象
for (Component component : childComponents) {
// 递归地进行子组件相应方法的调用,输出每个子组件对象
component.printName();
}
}
}
@Override
public void addChild(Component child) {
super.add((java.awt.Component)child);
childComponents.add(child);
}
}

2.7 PasswordField组件

import java.util.ArrayList;
import java.util.List;
import javax.swing.JPasswordField;
/**
* PasswordField组件
* 继承Swing的JPasswordField并实现自定义组件接口
*/
public class MyJPasswordField extends JPasswordField implements Component{
private static final long serialVersionUID = 1L;
private String name = "";
List<Component> childComponents = new ArrayList<Component>();
public MyJPasswordField(String printStr){
super(18);
this.name = printStr;
}
public void printName() {
// 先把自己输出
System.out.println("print " + name);
// 如果还包含其他子组件,那么就输出这些子组件对象
if (null != childComponents) {
// 输出当前对象的子组件对象
for (Component component : childComponents) {
// 递归地进行子组件相应方法的调用,输出每个子组件对象
component.printName();
}
}
}
@Override
public void addChild(Component child) {
childComponents.add(child);
}
}

2.8 TextField组件

import java.util.ArrayList;
import java.util.List;
import javax.swing.JTextField;
/**
* TextField组件
* 继承Swing的JTextField并实现自定义组件接口
*/
public class MyJTextField extends JTextField implements Component{
private static final long serialVersionUID = 1L;
private String name;
List<Component> childComponents = new ArrayList<Component>();
public MyJTextField(String printStr){
super(18);
this.name = printStr;
}
public void printName() {
// 先把自己输出
System.out.println("print " + name);
// 如果还包含其他子组件,那么就输出这些子组件对象
if (null != childComponents) {
// 输出当前对象的子组件对象
for (Component component : childComponents) {
// 递归地进行子组件相应方法的调用,输出每个子组件对象
component.printName();
}
}
}
@Override
public void addChild(Component child) {
childComponents.add(child);
}
}

2.9 生成窗口并打印组件信息

public class Client {
public static void main(String[] args){
MyJFrame jf = new MyJFrame("WindowForm(WINDOS窗口)","测试窗口");
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jf.setSize(300, 200);
MyJPanel p3 = new MyJPanel();
MyJLabel jLabel = new MyJLabel("picture(LOGO图片)",new ImageIcon("E:\\1.png"));
MyJPanel p1 = new MyJPanel("Frame(FRAME1)");
MyJLabel label1 = new MyJLabel("Label(用户名)", "用户名");
MyJTextField text1 = new MyJTextField("Textbox(文本框)");
MyJLabel label2 = new MyJLabel("Label(密码)", "密 码");
MyJPasswordField text2 = new MyJPasswordField("Passwordbox(密码框)");
MyJCheckBox jCheckBox = new MyJCheckBox("Textbox(记住用户名)","记住用户名");
MyJLabel label3 = new MyJLabel("Linklabel(忘记密码)", "忘记密码");
MyJPanel p2 = new MyJPanel();
MyJButton login = new MyJButton("Button(登录)", "登录");
MyJButton reg = new MyJButton("Button(注册)", "注册");
p1.addChild(label1);
p1.addChild(text1);
p1.addChild(label2);
p1.addChild(text2);
p1.addChild(jCheckBox);
p1.addChild(label3);
p2.addChild(login);
p2.addChild(reg);
p3.addChild(jLabel);
jf.addChildren(p3,BorderLayout.NORTH);
jf.addChildren(p1,BorderLayout.CENTER);
jf.addChildren(p2,BorderLayout.SOUTH);
jf.setVisible(true);
}
}



用户头像

WW

关注

还未添加个人签名 2019.06.04 加入

还未添加个人简介

评论

发布
暂无评论
面向对象的设计模式