组合设计模式编码 & 手写单例模式
发布于: 2020 年 06 月 25 日
组合设计模式实现 window 树结构
类图
定义组件接口,模板类和各具体的组件,引入了组件模板抽象类,目的是为了提供一些默认的实现和公共的方法。
Component 接口:
package threeday;
public interface Component {
public void print();
}
复制代码
ComponentTemplate 抽象
package threeday;
import java.util.ArrayList;
import java.util.List;
/**
* 定义模板,提供默认实现,同时提供一些公共的方法
*/
public abstract class ComponentTemplate implements Component {
private String componetName;
public ComponentTemplate(String componetName){
this.componetName = componetName;
}
protected List components = new ArrayList();
public void setComponents(List components){
this.components = components;
}
public List getComponents(){
return this.components;
}
public void print(){
System.out.println(componetName);
}
}
复制代码
WindowFrom 实现类
package threeday;
import java.util.ArrayList;
import java.util.List;
public class WindowForm extends ComponentTemplate {
public WindowForm(String componetName) {
super(componetName);
}
public void print() {
super.print();
for(int i=0;i<super.components.size();i++){
Component component = (Component)super.components.get(i);
component.print();
}
}
}
复制代码
Frame 实现类
package threeday;
import java.util.ArrayList;
import java.util.List;
public class Frame extends ComponentTemplate {
public Frame(String componetName) {
super(componetName);
}
public void print() {
super.print();
for(int i=0;i<super.components.size();i++){
Component component = (Component)super.components.get(i);
component.print();
}
}
}
复制代码
Picture 实现类
package threeday;
public class Picture extends ComponentTemplate {
public Picture(String componetName) {
super(componetName);
}
public void print() {
super.print();
}
}
复制代码
Button 实现类
package threeday;
public class Button extends ComponentTemplate {
public Button(String componetName) {
super(componetName);
}
public void print() {
super.print();
}
}
复制代码
Checkbox 实现类
package threeday;
public class CheckBox extends ComponentTemplate {
public CheckBox(String componetName) {
super(componetName);
}
public void print() {
super.print();
}
}
复制代码
Label 实现类
package threeday;
public class Lable extends ComponentTemplate {
public Lable(String componetName) {
super(componetName);
}
public void print() {
super.print();
}
}
复制代码
LinkLabel 实现类
package threeday;
public class LinkLable extends ComponentTemplate {
public LinkLable(String componetName) {
super(componetName);
}
public void print() {
super.print();
}
}
复制代码
PasswordBox 实现类
package threeday;
public class PasswordBox extends ComponentTemplate {
public PasswordBox(String componetName) {
super(componetName);
}
public void print() {
super.print();
}
}
复制代码
TextBox 实现类
package threeday;
public class TextBox extends ComponentTemplate {
public TextBox(String componetName) {
super(componetName);
}
public void print() {
super.print();
}
}
复制代码
组织类 main 入口
package threeday;
import java.util.ArrayList;
import java.util.List;
public class Assembler {
public static void main(String args[]){
// 实例化所有的页面元素
Component windowForm = new WindowForm("WINDOW 窗口");
Component picture = new Picture("LOGO 图片");
Component buttonDL = new Button("登录");
Component buttonZC = new Button("注册");
Component frame = new Frame("FRAME1");
Component lableUserName = new Lable("用户名");
Component textBox = new TextBox("文本框");
Component passwordLable = new Lable("密码");
Component password = new PasswordBox("密码框");
Component chekbox = new CheckBox("复选框");
Component textBoxUserName = new TextBox("记住用户名");
Component linkLable = new LinkLable("忘记密码");
// 组装windowForm
List windowFormComList = new ArrayList();
windowFormComList.add(picture);
windowFormComList.add(buttonDL);
windowFormComList.add(buttonZC);
windowFormComList.add(frame);
((WindowForm) windowForm).setComponents(windowFormComList);
// 组装frame
List frameComList = new ArrayList();
frameComList.add(lableUserName);
frameComList.add(textBox);
frameComList.add(passwordLable);
frameComList.add(password);
frameComList.add(chekbox);
frameComList.add(textBoxUserName);
frameComList.add(linkLable);
((Frame) frame).setComponents(frameComList);
windowForm.print();
}
}
复制代码
运行结果
手写单例模式(饿汉模式)
通过手写单例模式,写之前老脑中大概知道单例模式的几个知识点:
1.构造器必须私有,禁止外部调用;
2.在饿汉模式中实例是类的实例,在类加载时候就自动创建,启方法必须是静态的。
3.获取实例的方法必须是静态的,不然方法内部无法获取静态的实例。
在具体写的时候,对一些关键字,丢三落四的,字也好丑,还时而不时的查看了案例。
划线
评论
复制
发布于: 2020 年 06 月 25 日阅读数: 60
吴建中
关注
还未添加个人签名 2018.04.18 加入
还未添加个人简介
评论 (1 条评论)