1.单例模式
A.饿汉式--线程安全
/** * 单例模式:只能实例一个对象 * 饿汉式: * A.私有构造函数 * B.创建私有静态该类对象 * C.创建公共公开的静态方法,返回该私有对象 * @author ssj * */public class Ehanzi { //私有对象 private static Ehanzi single = new Ehanzi(); int a = 1; int b = 2; //私有构造函数 private Ehanzi(){} //无法创建对象 public void add(){ System.out.println(a+b); a++; b++; } public static Ehanzi getInstance(){ return single; }}
B.懒汉式--
/** * 1:懒汉式 * A.私有构造方法 * B.创建私有静态对象 为NULL * B.创建公共的返回该类的方法返回B创建的私有对象,若该类为空则 new 不为空则返回该对象 * @author ssj * 注意:此方法为线程不安全。若要安全则需要使用synchronized来进行改进 */public class Lhanzi {private static Lhanzi intance = null;//静态私用成员,没有初始化 private Lhanzi() { //私有构造函数 } public static Lhanzi getInstance() //静态,同步,公开访问点 { if(intance == null) synchronized(Lhanzi .class) { if(intance==null) intance = new Lhanzi(); } return intance; } int a =1; int b =2; public void add(){ System.out.println(a+b); a++; b++; }
注:饿汉式在开始就有对象存在,而懒汉式则是在需要时才有对象存在。二者在内存占用先后上有一定的区别。
2.工厂模式
工厂模式是多态的一种表现形式。使用父类作形参,向上造型。
工厂类:public class PersonFactory { //静态方法属于类 public static Person getPerson(String type){ if("ch".equals(type)) return new Chinese(); else if("en".contentEquals(type)) return new English(); //Person p = new English(); return null; } }父类:public class Person { //同一个包内 子类可以直接访问 public protected default public String name; protected int age; //默认修饰符跨包之后子类不能直接访问 同包内可以访问 protected
输出结果:
我是中国人。我是英国人。
3.静态代理模式
使用接口做形参,代理具体对象。
//接口public interface BeatifulGirl { void eat(); void shopping();}//代理类public class MP implements BeatifulGirl { private BeatifulGirl mv; public MP(BeatifulGirl mv){ this.mv = mv; } @Override public void eat() { // TODO Auto-generated method stub mv.eat(); } @Override public void shopping() { // TODO Auto-generated method stub mv.shopping(); }}//对象类1public class FoneS implements BeatifulGirl{ @Override public void eat() { // TODO Auto-generated method stub System.out.println("一勺小娘子正在吃饭。"); } @Override public void shopping() { // TODO Auto-generated method stub System.out.println("一勺小娘子正在睡觉。"); } }//对象类2public class Fbaby implements BeatifulGirl { @Override public void eat() { // TODO Auto-generated method stub System.out.println("宝儿姐正在吃饭。"); } @Override public void shopping() { // TODO Auto-generated method stub System.out.println("宝儿姐正在睡觉。"); }}//测试类public class TestMing { public static void main(String[] args) { BeatifulGirl fones = new FoneS(); BeatifulGirl fbaby = new Fbaby(); MP mp= new MP(fones); mp.eat(); mp.shopping(); mp = new MP(Fbaby); mp.eat(); mp.shopping(); }}输出结果:一勺小娘子正在吃饭。一勺小娘子正在睡觉。宝儿姐正在吃饭。宝儿姐正在睡觉。