单例模式之饿汉式

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

//接口
interface MyInterface {
	public void action();
}

// 被代理类
class MyObject implements MyInterface {
	@Override
	public void action() {
		System.out.println("我是被代理类,执行action!");
	}
}

//被代理接口
interface ClothFactory{
	public void productCloth();
}

//被代理类
class NikeClothFactory implements ClothFactory{

	@Override
	public void productCloth() {
		System.out.println("我是被代理类,Nike 生产衣服");
	}
}

//实现InvocationHandler接口的子类
class MyInvocationhandler implements InvocationHandler {

	private Object obj;

	public void setObject(Object obj) {
		this.obj = obj;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		System.out.println("动态代理类执行,收代理费");
		Object returnVal = method.invoke(obj, args);
		return returnVal;
	}

}

//动态代理类
class MyProxy {

	public static Object getProxyInstance(Object obj, InvocationHandler handler) {
		return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj
				.getClass().getInterfaces(), handler);
	}
}

public class TestProxy {

	/**
	 * @Title: main
	 * @Description:
	 * @param:
	 * @return void
	 * @user: wangzg
	 * @Date:2014-10-27
	 * @throws
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//被代理类
		MyObject myObject = new MyObject();

		MyInvocationhandler myInvocationhandler = new MyInvocationhandler();
		myInvocationhandler.setObject(myObject);
		Object myProxy =  MyProxy.getProxyInstance(myObject, myInvocationhandler);
		MyInterface myInterface = (MyInterface)myProxy;
		myInterface.action();

		NikeClothFactory nikeClothFactory = new NikeClothFactory();
		myInvocationhandler.setObject(nikeClothFactory);
		Object myProxyNike =  MyProxy.getProxyInstance(nikeClothFactory, myInvocationhandler);
		ClothFactory clothFactory = (ClothFactory)myProxyNike;
		clothFactory.productCloth();
	}

}
时间: 2024-08-30 12:48:58

单例模式之饿汉式的相关文章

单例模式(饿汉式 懒汉式)

单例模式单例模式:创建一个需要使用的对象.这里先分析为什么要用类来创建,本来可以创建一个non-local静态对象.就是在main函数之前创建 T a();这个对象.但是非局部静态对象一般由“模版隐式具体化”形成,在多个编译单元内,它的初始化顺序未知(effective c++ 4th).所以用class方法的形式来构建一个单例模式. 首先单例模式分为饿汉式和懒汉式.饿汉:很饿,很着急,需要尽早的构建对象.对象式提前构建好的.懒汉:很懒,不着急,当对象需要用的时候,才构建对象. 1.饿汉式. 1

设计模式-单例模式(饿汉式及懒汉式的Java实现)

单例模式 单例模式在程序设计中使用的频率非常之高,其设计的目的是为了在程序中提供唯一一个对象(保证只被构造一次),例如写入日志的log对象,windows的任务管理器实现(只能打开一个).这里主要介绍单例模式使用Java的实现(包括饿汉式及懒汉式). 实现 这里使用Log类作为例子,Log对象需要在程序中只有一个对象且只初始化一次. 饿汉式 饿汉式的单例模式理解起来是比较容易的,就是在单例类加载的时候就初始化需要单例的对象.实现也比较容易. public class Singleton{ pri

单例模式(饿汉式单例模式与懒汉式单例模式)

首先弄清楚什么是单例模式? 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案 单例模式的特点:(单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例) 1.该类只能有一个实例 2.该类只能自己创建这个唯一实例,且别人对该类无法创建实例 3.该类提供一个公开的方法public

单例模式:饿汉式与懒汉式

单例模式 唯一的实例 注意:私有化构造器.自行创建(含有一个该类的静态变量来保存唯一实例).必须自行向整个系统提供这个实例(对外提供获取该实例对象的方式:1.直接暴露2.静态变量的get方法获取) 几种常见形式 饿汉式:直接创建对象,不存在线程安全问题 直接实例化饿汉式简洁直观 枚举式 最简洁 静态代码块饿汉式 适合复杂实例化 饿汉式方式一: public class Singleton1 { public static final Singleton1 SINGLETON1 = new Sin

java学习之单例模式(饿汉式与懒汉式)

---恢复内容开始--- 设计模式:解决某一类问题最行之有效的方法 java中有23种设计模式 今天学习其中一种:单例设计模式:解决一个类在内存只存在一个对象 想要保证对象唯一. 1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象 2.还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象 3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式 这三部分用代码体现: 1.将构造函数私有化 2.在类中创建一个本类对象 3.提供一个方法可以获取到该对象 packag

单例模式的饿汉式为什么需要双重锁定

public class SingleTon { private static SingleTon singleTon = null; public SingleTon() { // TODO Auto-generated constructor stub } public static SingleTon getInstance(){ if (singleTon == null) { synchronized (SingleTon.class) { if (singleTon == null)

设计模式--单例模式之饿汉式

1.概念: 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建.这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象. 2.特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例 3.使用场景:在返回消息给客户端的时候,我们会统一返回

Java单例模式《一》饿汉式

package com.study.mode; /** * 单例模式:饿汉式. 线程安全. * @ClassName: SingleBean * @author BlueLake * @date 2012年9月5日 下午8:45:10 */ public class SingleBean { //1.私有化构造方法 private SingleBean(){ } //2.创建当前对象的静态实例. private static SingleBean single= new SingleBean()

JAVA中的饿汉式和饱汉式单例模式及jdk中Runtime类的单例模式实现方式详解

一.描述 单例模式是一种非常常见的设计模式,即一个类只能有一个对象(实例),一般通过将该类的构造器私有化,来阻止在该类外创建该类的对象,并提供给外界一个唯一的对象(这个对象在该类中创建). java中的单例模式常见的有两种实现方式,一种是恶汉方式,即将该类对象用static休息并且在类加载的时候进行初始化:另一种是饱汉方式,在程序中需要用到该对象的时候才初始化,一旦初始化一次就不会再重新生成该对象. JDK中的Runtime类其实也是一种单例模式,而且其采用的是饿汉的方式. 二.源代码 pack