观察者、代理、工厂、单例
工厂:
简单工厂(工厂类、产品类,由工厂方法返回产品实例)
1、创建工厂类
2、创建生产方法
3、执行生产方法获得产品实例
抽象工厂
4、产品类加入接口(多个产品类)
5、工厂类加入接口(每个工厂生产不同产品)
6、创建一个总工厂类,根据名称选择工厂生产产品
建造者:( 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示)
Product Builder(产品建造方法)Director
对象由Builder创建
Builder对对象进行调整的方法(属性)
由Director内嵌Builder对象
单态单例:(只能创建唯一实例)
public class Singleton {
private static Singleton sing;
private Singleton() {
}
public static Singleton getInstance() {
if (sing == null) {
sing = new Singleton();
}
return sing;
}
}
原型模式
通过克隆完成实例构建(克隆方法)
3种代理模式
1、java代理
2、JDK代理
stu t= new stu();
myadd p= (myadd) Proxy.newProxyInstance(stu.class.getClassLoader(),
stu.class.getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("代理的额外内容");
Object returnValue = method.invoke(t, args);
return returnValue;
}
});
p.add();
3、cglib代理
多线程
进程:程序运行资源(操作系统分配)
线程:自上向下的执行过程(main 主线程入口)
多线程:一个程序同时多个执行过程(垃圾回收也是一个线程)
线程同步(协同),线程异步(无业务交叉)
同步线程(排队等待处理,阻塞),异步线程(非阻塞)
thread类+runnable接口
Thread.sleep(500); 将当前进程休眠(毫秒)
Thread.interrupted();中断状态重置为非中断状态
Thread.yield(); 线程让步(其他线程的机会)
Thread.currentThread(); 获取当前线程
Thread th = new Thread(new Runnable() {
public void run() {
//子线程入口
}
});
th.start();//启动线程
Thread th = new Thread();
th.start(); 启动线程
th.setDaemon(true);//设置为守护线程(非守护线程全部结束,将自动结束)
th.getId() 线程唯一标识
th.setPriority(12); 设置优先级
State s = th.getState(); 获取状态
th.join(); 线程礼让
th.suspend(); 休眠(lock)
th.resume(); 唤醒
timer类+TimeTask接口
Timer t = new Timer();
t.schedule(new TimeTask(){
public void run(){
System.out.println(111);}
},2000,1000};
用法
new Thread(new Runnable() {
public void run() {
//子线程入口
}.start();
接口玩法:
1、接口实现类 接口使用为类实例对象 (自身类本身)
2、内部匿名类 接口使用为接口实例(重写方法)
3、接口变量定义 接口使用为变量
线程同步:
synchronized wait() notify()
**线程池:**容器,能放多个线程,给个处理状态(空闲、繁忙),不会停止,没给任务就悬挂着等待分配
Properties 配置文件处理(本质=map集合)
生成保存配置:
Properties p = new Properties();//key value只能字符串和数字(文本能识别的,日期也行)
p.put("d", "232");
p.store(new FileOutputStream("c://a.properties"), "人员信息");//保存文件
获取配置:
p.load(new FileInputStream("d://a.properties"));//读取文件
String v = p.getProperty("sex", "女");//获取值,如未配置,提供默认值
System.out.println(v);
中文支持:
p.load(new InputStreamReader(new FileInputStream("d://a.properties"),"utf-8"));
xml文件处理
Document doc =DocumentHelper.createDocument();
Element root=doc.addElement("aaaa");
//add() 节点,属性,备注,文本(接口 ctrl+t 实现类)
Element el1=new DefaultElement("bbbb");
el1.add(new DefaultAttribute("asd", "egg记得给人家"));
root.add(new DefaultText("dddddddddddddd"));
root.add(el1);
XMLWriter writer =new XMLWriter(new FileOutputStream("c:/a.xml"),OutputFormat.createPrettyPrint());
writer.write(doc);
writer.close();
读取:
SAXReader reader=new SAXReader();//创建读取文件内容对象
document=reader.read("XMLtest.xml");//指定文件并读取
xml的三种java读写方法:
1、w3c.DOM的方式读取
2、以DOM4J的方式读取
3、以JDOM的方式读取