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


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


/**
 * 相当于真实角色,实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色使用
 * 也就是这个类的对象(例如周杰伦),他要实现他的sing方法,这是他的药关注的业务逻辑。这个实现了的
 * sing方法是为了供代理角色使用的
 *
 * 只需要关注真正的业务逻辑,其他方法是不用关注的
 */
package com.bjsxt.cn.proxy.staticProxy;
public class RealStar implements Star {
 /**
  * 面谈
  */
 @Override
 public void confer() {
  System.out.println("RealStar.confer()");
 }
 @Override
 public void signContract() {
  System.out.println("RealStar.signContract()");
  
 }
 @Override
 public void bookTicket() {
  System.out.println("RealStar.bookTicket()");
 }
 @Override
 public void sing() {
  System.out.println("RealStar(真实角色:周杰伦).sing()");
  System.out.println("真实角色在唱歌");
  
 }
 @Override
 public void collectMoney() {
  System.out.print("RealStar.collectMoney()");
  
 }
 
}


/**
 * 代理角色:
 *   实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑来实现抽象方法,并可以增加自己的方法
 *   这句话的意思就是,代理角色中方法的实现是通过调用了真实角色的业务逻辑(即也就是真实角色的方法)
 *   从而实现了自己的方法。
 *  
 *   这样的实现方式和具有将统一的流程控制放到代理角色中处理。(换言之,我作为代理角色,即可以安排自己需要安排
 *   的事务,相应的我可以通过调用真实角色的业务逻辑来实现我所不能实现的东西,但这都在代理角色的内部得到实现
 *   也就是把统一的流程控制都放到了代理角色中了)
 *
 *   PS:可以用ctrl+shift+M/Ctrl+Shift+o/Ctrl+1导入相应的包
 */
package com.bjsxt.cn.proxy.staticProxy;
public class Proxy implements Star {
 private Star realStar;
 
 /**
  * 代理角色要有真实角色的引用,这样可以方便的访问真实角色的业务逻辑
  * 通过构造函数把真实角色的引用传入
  * @param realStar
  */
 public Proxy(Star realStar) {
  super();
  this.realStar = realStar;
 }
 @Override
 public void confer() {
  System.out.println("Proxy.confer()");
  
 }
 @Override
 public void signContract() {
  System.out.println("Proxy.signContract()");
  
 }
 @Override
 public void bookTicket() {
  System.out.println("Proxy.bookTiciket()");
  
 }
 /**
  * 代理角色的其他方法,自己就可以实现,而sing方法需要调用艺人的唱歌功能。这也就是,代理角色作为
  * 真实角色的代理,通过真实角色的业务逻辑来是想抽象角色的方法,并可以增加自己的方法
  */
 @Override
 public void sing() {
  this.state();
  this.confer();
  this.signContract();
  this.bookTicket();
  
  realStar.sing();
  
  this.collectMoney();
  
 }
 @Override
 public void collectMoney() {
  System.out.println("Proxy.collectMoney()");
  
 }
 
 public void state() {
  System.out.println("我们的艺人才高八斗。学富五车");
 }
}


/**
 * 时间:2015年4月4日19:16:52
 * 该代码是测试类,用于测试静态代理模式的实现
 * client相当于客户,客户想让杰伦唱歌,只需要找到杰伦代理即可
 */
package com.bjsxt.cn.proxy.staticProxy;
public class Client {
 public static void main(String[] args) {
  Star star = new RealStar();
  Proxy proxy = new Proxy(star);//把杰伦传给代理
  
  proxy.sing();//表面调用了代理的sing方法,但其实内部由proxy调用了明星的具体实现方法
 }
}
/*
 *
 *
    我们的艺人才高八斗。学富五车
 Proxy.confer()
 Proxy.signContract()
 Proxy.bookTiciket()
 RealStar(真实角色:周杰伦).sing()
 真实角色在唱歌
 Proxy.collectMoney()
 *
 *
 *
 */

				
时间: 2024-08-09 10:27:59

GOF23设计模式之静态代理模式实现之经典的相关文章

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

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

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

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

设计模式一静态代理模式

静态代理模式 间接地访问该对象,从而限制.增强或修改该对象的一些特性.       代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 静态代理 是由程序员创建或特定工具自动生成源代码,在对其编译. 在程序员运行之前,代理类.class文件就已经被创建了. 动态代理 是在程序运行时通过反射机制动态创建的. 静态代理总结: 优点:可以做到在符合开闭原则的情况下对目标对象进行功能扩展. 缺点:我们得为每一个服务都得创建代理类,工作量太大,不易管理. 同时接口一旦发生改变,代理类也

设计模式之静态代理模式

举个栗子: 比如你结婚,婚庆公司帮你代理一些事情(布置婚房,准备午餐等),虽然婚前公司做的,但是是为你而做的 静态代理的设计模式的三要素: 1.真实角色 2.代理角色:代理角色需要具有真实角色的引用,这样才能实现对真实角色的代理 3.真实角色和代理角色要实现共同的接口 看个样例: Staticproxy.java package 设计模式; /** * @author:yb * @version 创建时间:2018-12-24 下午4:48:03 类说明 */ /* * 静态代理 设计模式 *

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

设计模式学习--------12.代理模式学习

场景: 福尔摩斯一直想送礼物给花生,但是羞于直接赠送,于是想到让房东太太去帮忙送礼物.编程如何实现呢? 定义: 为其他对象提供一种代理以控制对这个对象的访问. 角色: Proxy:代理对象.有下列功能: 实现与具体的目标对象一样的接口,这样就可以使用代理来代替具体的目标对象. 持有一个具体目标对象的引用,可以在需要时调用具体的目标对象. 可以控制对目标对象的访问,并可以负责创建和删除它. package com.kris.study; public class Proxy implements

【设计模式】Proxy 代理模式

[设计模式]Proxy 代理模式 1.代理模式的定义 代理模式:为另一个对象提供一个替身或占位符以控制对这个对象的访问. 2.静态代理 首先我们通过案例来引出为什么我们需要使用代理模式. 我们给出如下一个接口Moveable 和该接口的实现类: Moveable.java package com.proxy; public interface Moveable { void move(); } Tank.java package com.proxy; import java.util.Rando

设计模式学习之--代理模式

代理模式,顾名思义,意思和我们日常生活中的代理差不多,举一个最简单的例子,我们知道,我们的火车站购票有很多的火车票代售点,这个火车票代售点可以代替我们的火车站的售票处让我们买票,当然,代售点相比于火车站售票点又可以提供电话订票和提前预定,这样,火车票代售点就基本可以实现火车站售票点的基本功能,同时还可以提供相对于火车站售票点其他的功能.那么,我们的设计模式中的代理模式就是这个意思. 在我们的程序中,许多类的方法中我们总需要一些额外的共同的功能,比如日志和性能优化操作,如果在所有 这些类中都加入这

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

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