写点什么

组合设计模式编码 & 手写单例模式

用户头像
吴建中
关注
发布于: 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.获取实例的方法必须是静态的,不然方法内部无法获取静态的实例。


在具体写的时候,对一些关键字,丢三落四的,字也好丑,还时而不时的查看了案例。



用户头像

吴建中

关注

还未添加个人签名 2018.04.18 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
考虑容器的设计,不是模板
2020 年 06 月 26 日 09:40
回复
没有更多了
组合设计模式编码&手写单例模式