博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-单例,静态代理,工厂
阅读量:4554 次
发布时间:2019-06-08

本文共 2815 字,大约阅读时间需要 9 分钟。

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();         	}}输出结果:一勺小娘子正在吃饭。一勺小娘子正在睡觉。宝儿姐正在吃饭。宝儿姐正在睡觉。

  

  

转载于:https://www.cnblogs.com/ssjifm/p/7182644.html

你可能感兴趣的文章
Android源码分析:Telephony部分–phone进程
查看>>
关于 redis.properties配置文件及rule
查看>>
WebService
查看>>
关于Java中重载的若干问题
查看>>
Java中start和run方法的区别
查看>>
23种设计模式中的命令模式
查看>>
[转载]年薪10w和年薪100w的人,差在哪里?
查看>>
shell 日期参数
查看>>
package的使用
查看>>
括号生成
查看>>
优秀的前端需要做到什么?
查看>>
aws cli command line interface的安装与使用
查看>>
10)将地址换成常量
查看>>
cocos2d-x3.0 解释具体的新的物理引擎setCategoryBitmask()、setContactTestBitmask()、setCollisionBitmask()...
查看>>
Cocos2d-x
查看>>
FIR滤波器设计
查看>>
1005 继续(3n+1)猜想 (25 分)
查看>>
【Uva 1252】Twenty Questions
查看>>
1_访问命令行
查看>>
File操作相关
查看>>