`
ponlya
  • 浏览: 159529 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

设计模式-原型-代理

阅读更多

原型

拷贝对象

 

public class ProImp   {

	.......	
	/**
	 * 克隆一个自己,因没有属性,不用复制值
	 */
	public Object clone(){ 
		ProImp a  =  new ProImp(); 
                a.xxx = xxx;
		return a;
	}
}

Ojbect的 clone()每次克隆获取的是同一个实例。指向的是同一内存空间。
clone一个对象,一般是有值的,但是new一个对象是不一定有值
代理

 

1+N hibernate的经典问题。

代理用来控制对象的访。

自己实现的代理常叫静态代理,这样的实现在接口变化时,修改较多。 JDK支持动态代理。JAVA的动态代理目前依靠代理接口InvocationHandler:反射+动态生成class技术,来动态生成被代理的接口实现对象。 cglib等第三方工具包也提供了。

JDK

 

public class DynamicProxy implements InvocationHandler {

	private Subject sb = null;
	
	public DynamicProxy(Subject sb){
		this.sb = sb;
	}
	
	public Subject getProxyInterface(RealSubject rs){
		//设置被代理对象,方便invoke操作
		this.sb = rs ;
		//将真正的订单对象和动态关联起来
		Subject sub = (Subject)Proxy.newProxyInstance(
				RealSubject.class.getClassLoader(),
				RealSubject.class.getInterfaces(), 
				this);
		return sub;
	}
	
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		//if(method.getName().startsWith(""))
		
		return method.invoke(sb, args);
	}

}

RealSubject rs = new RealSubject();
DynamicProxy dp = new DynamicProxy(rs);
Subject sb = dp.getProxyInterface(rs);
sb.doSomeThing();

static
public class ProxySubject implements Subject {

	private Subject real = null; // 持有被代理的具体的目标对象

	public ProxySubject(Subject sub) {// 构造方法传入被代理的目标对象
		real = sub;
	}

	public void doSomeThing() {
		// 可以在这里加些权限或者其它数据完整性的判断,如果通过则继续
		before(); // 有点像前置通知
		if (null != real)
			real.doSomeThing();
		end(); // 有点像后置通知
	}

	public void before() {
		System.out.println("in" + ProxySubject.class + " before() ");
	}

	public void end() {
		System.out.println("in" + ProxySubject.class + " end() ");
	}
}
 
 
 
 
 
分享到:
评论

相关推荐

    C#23种设计模式样例代码和UML图

    C#23种设计模式样例代码和UML图等 创建型模式(抽象工厂模式、工厂方法模式、单例模式、建造者模式、原型模式); 行为型模式(策略模式、 迭代器模式、原型模式、职责链模式、 模板方法、 命令模式、 解释器模式、 ...

    设计模式课件大全

    设计模式05-建造者、原型模式 设计模式06-适配器、桥接、组合模式 设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 ...

    设计模式-C++

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

    设计模式--C++

    1.1 什么是设计模式 2 1.2 Smalltalk MVC 中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...

    23种设计模式 -设计模式图解.7z

    23种设计模式的特点定义、优缺点、使用场景,源码中如何使用,资料思维导图。总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七...

    JAVA设计模式-day2.pdf

    JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...

    设计模式课程设计---使用5个以上不同的设计模式完成(java)

    本系统使用Java代码实现,是设计模式的期末课程设计,共使用了5种设计模式,分别是**原型模式、单例模式、抽象工厂模式、代理模式、建造者模式。*,希望对各位有帮助

    c# 设计模式实例教程

    代理模式-水果的销售 单例模式-果园喷洒杀虫剂 访问者模式-果农培育果树 工厂方法模式-果园引进新品种 观察者模式-果园的监控 简单工厂模式-果园种植水果 建造者模式-建造不同的果园 原型模式-建造同样的果园 桥接...

    java版本二十三种设计模式.zip

    - 23种设计模式 - 工厂方法模式(Factory Method) - 抽象工厂模式(Abstract Factory) - 单例模式(Singleton) - 建造者模式(Builder) - 原型模式(Prototype) - 代理模式(Proxy) - 适配器模式(Adapter) - 装饰...

    设计模式--可复用面向对象软件的基础

    1.2 Smalltalk MVC中的设计模式 1.3 描述设计模式 1.4 设计模式的编目 1.5 组织编目 1.6 设计模式怎样解决设计问题 1.7 怎样选择设计模式 1.8 怎样使用设计模式 第二章 实例研究:设计一个文档编辑器 2.1 设计问题...

    研磨设计模式-part2

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    研磨设计模式-part4

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    研磨设计模式-part3

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    Java设计模式-图解-附代码

    1.1.5 原型模式 15 1.2 结构型模式 17 1.2.1 适配器模式 17 1.2.2 桥接模式 19 1.2.3 组合模式 23 1.2.4 装饰模式 26 1.2.5 外观模式 29 1.2.6 享元模式 32 1.2.7 代理模式 34 1.3 行为型模式 37 1.3.1 责任链模式 ...

    Java 经典设计模式讲解以及项目实战

    Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...

    基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等

    Java设计模式共有23种,分别为:抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式、桥接模式、组合模式、装饰模式、享元模式、代理模式、命令模式、解释器模式、访问者模式、迭代子...

    设计模式-7种开发语言(C#、JAVA、JavaScript、C++、Python、Go、PHP).pdf

    24种设计模式的入门,整合7种开发语言的代码示例。 (C#、JAVA、JavaScript、C++、Python、Go、PHP) 第一节 设计模式:学习顺序 第二节 简单工厂模式 第三节 工厂方法模式 第四节 抽象工厂模式 第五节 单例模式 第...

    [源代码] 修炼Java开发技术 在架构中体验设计模式和算法之美 (源代码)

    ☆ 资源说明:☆《修炼Java开发技术 在架构中体验设计模式和算法之美》 (随书源代码)☆ 开发环境:☆IntelliJ IDEA 13.1.5 Build 135.1289☆ 章节说明:☆Chapter 02 架构中的设计原则 - (Chapter02.rar)Chapter 03 ...

    JAVA设计模式chm文档

    设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator...

    23种设计模式 - 各种模式的学习

    23种设计模式 目录 创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton(单例) 结构型 6. Adapter Class/Object(适配器) ...

Global site tag (gtag.js) - Google Analytics