(一)静态代理
1.真实角色
2.代理角色,包含真实角色的引用
3.两者实现相同的接口
interface Merry{//接口
merry();
}
class You implements Merry{//真是角色
public void merry(){
System.out.println("你和小仙女结婚了!");
}
}
class WeddingCompany implements Merry{//代理角色
Merry You;//真是角色的引用
private void before(){}
private void after(){}
WeddingCompany(Merry You){this.You = You;}
public void Merry(){
You.merry();
before();
after();
}
}
public static void main(String[] args){
Merry You = new You();
WeddingCompany com = new WeddingCompany(You);
com.merry();
}
输出结果为:你和小仙女结婚了!
(二)、单例设计模式
* 1.单例设计模式:确保一个类只有一个对象
* 2.构造器私有化
* 3.声明一个私有的静态变量
* 4.创建对外的公共静态方法访问该变量,如果变量没有赋值对象,则创建对象
public class JVM {//懒汉式
private static JVM instance = null;//声明一个私有的静态变量
//构造器私有化,避免外部直接创建对象
private JVM() {
}
//创建对外的公共静态方法访问该变量,如果变量没有赋值对象,则创建对象
public static JVM getInstance() {
if(instance == null) {
synchronized(JVM.class){//静态方法中不含this,锁类.class
if(instance == null) {
instance = new JVM();
}
}
}
return instance;
}
}
public class JVM {//饿汉式
private static class JVMholder{//内部类,用来延缓加载时间
private static JVM instance = new JVM();//声明一个私有的静态变量,并初始化
}
//构造器私有化,避免外部直接创建对象
private JVM() {
}
//创建对外的公共静态方法访问该变量,如果变量没有赋值对象,则创建对象
public static JVM getInstance() {
return JVMholder.instance;
}
}
(三)、装饰设计模式
一个类包装另一个类,提升类的功能
package java_07_11;
/**
* 装饰设计模式
* @author xiao
* @for training
*/
public class DecorateDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Voice v = new Voice();
v.say();
Trumpt trumpt = new Trumpt(v);
trumpt.say();
}
}
class Voice{//声音
private int i;//音量
Voice(){
i = 100;
}
public int getI() {
return i;
}
public void say(){//说话
System.out.println(i);
}
}
class Trumpt{//喇叭
Voice v;
Trumpt(Voice v){
this.v = v;
}
public void say() {//扩大音量
System.out.println(v.getI() * 100);
}
}