静态代理模式

package 代理模式;

/**

* 定义一个代理类,该代理类是一个接口

* @author lang

*背景:代理模式就是假如C想从香港买点奶粉,但是C去不了香港,又不认识香港的朋友,C只好去超市看有没有奶粉

*此时超市就是代理,但背后并不是超市跑到香港去买的奶粉,而是送货的充当了背后的角色,不多说,看代码

*/

public interface Proxy {

/**

* 定义了一个代购的方法(买东西,例如从香港买奶粉回来)

*/

public void buySomeThing();

/**

* 定义了一个卖东西的抽象方法

*/

public void sellSomeThing();

}

//超市类

package 代理模式;

public class SuperMarket implements Proxy{

private Proxy proxy;

//这里通过构造方法传值,

public SuperMarket(Proxy proxy){

this.proxy = proxy;

}

@Override

public void buySomeThing() {

// TODO Auto-generated method stub

//注意这里,并不是超市真的自己去香港买东西,而是传进来的Proxy的实现类真正意义上在做的

this.proxy.buySomeThing();

}

@Override

public void sellSomeThing() {

// TODO Auto-generated method stub

//同上

this.proxy.sellSomeThing();

}

}

//送货员

package 代理模式;

public class deliveryman implements Proxy{

//真正意义上在背后默默的做着工作的人,好辛苦呀

@Override

public void buySomeThing() {

// TODO Auto-generated method stub

System.out.println("我可以从香港带一些特产,例如XXX");

}

@Override

public void sellSomeThing() {

// TODO Auto-generated method stub

System.out.println("我可以把这些东西送到香港卖出去");

}

}

//当当当,C要去给儿子买奶粉了,走起

package 代理模式;

/**

* C要去超市买奶粉了,走起!!!

* @author lang

*

*/

public class C {

public static void main(String[] args) {

SuperMarket sup = new SuperMarket(new deliveryman());

//表面上看是调用的是超市的方法,暗地里调用的是送货员的方法,为送货员点个赞,哈哈哈。。

sup.buySomeThing();

sup.sellSomeThing();

}

}

/**

执行代码:

我可以从香港带一些特产,例如XXX

我可以把这些东西送到香港卖出去

*/

假如过了一段时间后,超市不想要送货员给他送货的,需要另一家提供的货源,因为人家的货可能更好吧,那么怎么办呢,依然很ease,除了添加一个otherDeliveryman,其他的几乎不用改

小二,上代码,好的 看官们,这就来了

package 代理模式;

public class OtherDeliveryman implements Proxy{

//真正意义上在背后默默的做着工作的人,好辛苦呀

@Override

public void buySomeThing() {

// TODO Auto-generated method stub

System.out.println("我可以从香港带一些特产,例如XXX,并且还可以给你们优惠o!!!");

}

@Override

public void sellSomeThing() {

// TODO Auto-generated method stub

System.out.println("我可以把这些东西送到香港卖出去,并且可以给你们卖到好的价钱呦!!!");

}

}

//but主类还是要改滴

//当当当,C又要去给儿子买奶粉了,再次走起

package 代理模式;

/**

* C要去超市买奶粉了,走起!!!

* @author lang

*

*/

public class C {

public static void main(String[] args) {

SuperMarket sup = new SuperMarket(new
OtherDeliveryman());//就改这么多

//表面上看是调用的是超市的方法,暗地里调用的是送货员的方法,为送货员点个赞,哈哈哈。。

sup.buySomeThing();

sup.sellSomeThing();

}

}

/**

我可以从香港带一些特产,例如XXX,并且还可以给你们优惠o!!!

我可以把这些东西送到香港卖出去,并且可以给你们卖到好的价钱呦!!!

*/

时间: 2024-10-09 10:33:27

静态代理模式的相关文章

JAVA笔记7__接口应用/Object类/简单工厂模式/静态代理模式/适配器模式

/** * 接口应用 */ public class Main { public static void main(String[] args) { Person p = new Person("fish7"); p.setIsay(new BeforeGong()); p.say(); p.setIsay(new AfterGong()); p.say(); } } class Person{ //只有在运行期才和say行为关联起来,这就叫面向接口编程 private String

跟王老师学反射(十):静态代理模式

跟王老师学反射(十):静态代理模式 主讲教师:王少华   QQ群号:483773664 学习内容 理解代理机制 掌握静态代理 一.代理模式的概念 代理模式就是指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关业务的处理. 代理模式一般涉及到三个角色 抽象角色:声明真实对象和代理对象的共同接口 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能替代真实对象相同的接口以便在任何时刻都能替代真实对

JAVA学习--反射之静态代理模式

1 //静态代理模式 2 //接口 3 interface ClothFactory{ 4 void productCloth(); 5 } 6 //被代理类 7 class NikeClothFactory implements ClothFactory{ 8 9 @Override 10 public void productCloth() { 11 System.out.println("Nike工厂生产一批衣服"); 12 } 13 } 14 //代理类 15 class Pr

设计思想与模式之四静态代理模式

一 概述 1.什么是代理模式? 为了隐藏与保护目标对象,为其他对象提供一个代理以控制对该目标对象的访问. 2.什么是静态代理模式? 代理模式有两种: 静态代理:代理对象固定. 动态代理:代理对象不固定. 二 静态代理模式 1.基本结构: 父类:可以是一个接口.抽象类.一般类,一般是接口,保证可以按照操作目标对象的方式操作代理对象. 目标类:实现了父类. 代理类:不仅拥有与目标相同的父类,而且包含目标类对象. 2.代理类包含目标对象的实现 代理模式的作用是隐藏与保护目标对象,因此目标对象不能由用户

GOF23代理模式之静态代理模式理解之经典

 设计模式之代理模式之静态代理模式      代理模式(Proxy pattern)          核心作用:               通过代理,控制对对象的访问.                    可以通过详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理.(即AOP的微观实现)               AOP(面向切面编程.Aspect Oriented Programming)的核心实现的机制          举个例子来理解这种模

GOF23设计模式之静态代理模式实现之经典

 /**  * 抽象就角色,定义代理角色和真实角色的公共对外方法  * 时间:2015年4月4日18:45:00  * 在这个例子中,抽象角色起着规范代理角色和真实角色的作用.  * 其中具有方法,面谈,签合同收预付款,预订机票,唱歌,收尾款  */ package com.bjsxt.cn.proxy.staticProxy; public interface Star {  void confer();  void signContract();  void bookTicket();

Java代理模式——静态代理模式

一:代理模式 代理模式的作用是:为其他对象提供一种代理以控制这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 二:代理模式设计到的角色 抽象角色:声明真是对象和代理对象的共同接口(抽象类或接口). 代理角色:代理对象角色内部含有对真是对象的引用,从而可以操作真是对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能够代替真是对象.同时,代理对象可以在执行真实对象的操作时,附加其他操作,相当于对真是对象进行封装. 真实

多线程中的静态代理模式

静态代理的例子: 1 /** 2 * 1.真实角色 3 * 2.代理角色 4 * 3.共同实现的接口 5 * @author tele 6 * 7 */ 8 public class StaticProxy { 9 public static void main(String[] args) { 10 //创建真实角色,可使用接口 11 Marry you = new You(); 12 //创建代理角色,代理角色往往要添加新的方法,不建议使用接口创建 13 WeddingCompany com

静态代理模式学习

静态代理模式 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问.代理模式说白了就是"简单对象的 代表",在访问对象时引入一定程度的间接性,因为这种间接性可以附加很多用途. // 测试类 public class ProxyPattern { public static void main(String[] args) { Action userAction = new UserAction();// 被代理对象 ActionProxy proxy = new Act

Java之静态代理模式

静态代理模式:这种模式可以实现帮助被代理者完成一些前期的准备工作和后期的善后工作,但是核心的业务逻辑仍然是由被代理者完成. 代码结构由三部分组成 (1)接口:主题 (2)代理类 (3)被代理类 实现方式:代理类和被代理类要实现同一个主题接口,而且代理类中要有一个被代理类的属性(target),这样才能把核心业务逻辑交还给被代理类完成:而一些与核心业务逻辑无关的逻辑,并且需求是多变的,那么这些逻辑就可以交给代理类来完成 示例 需求:计算add()的运行时间 public class StaticP