[设计模式]静态代理模式

Subject.java

1 package cn.itcast.proxy;
2
3 //定义一个抽象类,代理角色和真实角色都要实现这个共同的抽象类
4 public abstract class Subject {
5     //定义一个方法,这个方法就好比中介和房东都有向外租房子的方法
6     public abstract void request();
7 }

RealSubject.java

1 package cn.itcast.proxy;
2
3 //这个类好比是真正的房东.实现向外租房子的方法
4 public class RealSubject extends Subject{
5     public void request() {
6         System.out.println("真正的房东向外租房子");
7     }
8 }

ProxySubject.java

 1 package cn.itcast.proxy;
 2
 3 //这个类是好比是中介(代理房东向外租房子),和房东(RealSubject)共同实现了Subject抽象类(接口)
 4 public class ProxySubject extends Subject {
 5     //代理类(中介)要有一个真实类(RealSubject)的一个引用
 6     private RealSubject realSubject;
 7
 8     public void request() {
 9         this.preRequest();//this就是ProxySubject的一个对象  ProxySubject proxy = new ProxySubject.
10         if(null == realSubject){
11             realSubject = new RealSubject();
12         }
13         realSubject.request();//真实角色完成事情
14         this.bacRequest();
15     }
16     //代理对象可以在真实角色完成的前后增加一些自己的方法.
17     //就好比中介先要领房客看房(preRequest()方法),
18     //然后和房东,房客一起完成租房(request()方法),
19     //最后收取房客钱(bacRequest()方法)
20     private void preRequest(){
21         System.out.println("中介领房客看房子");
22     }
23     private void bacRequest(){
24         System.out.println("中介向房客收钱");
25     }
26 }

Client.java

 1 package cn.itcast.proxy;
 2 //这个类就好比是房客要租房子
 3 //
 4 public class Client {
 5     public static void main(String[] args) {
 6         Subject porxySubject = new ProxySubject();
 7         porxySubject.request();
 8     }
 9 }
10     /*
11     打印内容:
12         中介领房客看房子
13         真正的房东向外租房子
14         中介向房客收钱
15     */
时间: 2024-12-22 04:23:18

[设计模式]静态代理模式的相关文章

设计模式—静态代理模式(聚合与继承方式比较)

一.概述 1.目标:要在Tank的move()方法做时间代理及日志代理(可以设想以后还要增加很多代理处理),且代理间的顺序可活更换 2.思路: (1)聚合:代理类聚合了被代理类,且代理类及被代理类都实现了movable接口,则可实现灵活多变,具体看代码 (2)继承:继承不够灵活,随着功能需求增多,继承体系会非常臃肿.具体看代码 二.代码 1.Movable.java 2.Tank.java 3.TankTimeProxy.java 4.TankLogProxy.java 5.Tank2Time.

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

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

设计模式一静态代理模式

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

设计模式之代理模式(Proxy)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

JAVA设计模式之代理模式

学编程吧JAVA设计模式之代理模式发布了,欢迎通过xuebiancheng8.com来访问 一.概述 给某一个对象提供一个代理,并由代理对象来完成对原对象的访问.代理模式是一种对象结构型模式. 二.适用场景 当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口. 三.UML类图 四.参与者 1.接口类:Subject 它声明了真实访问者和代理访问者的共同接口,客户端通常需要针对接口角色进行编程. 2.代理类

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

设计模式【代理模式】

首先我们先了解代理,代理是指一个人或者一个机构代表另一个人或者机构采取行动.代理模式给某一个对象提供一个代理对象,并由代理对象控制对象控制对原对象的引用. 代理模式一般涉及三个角色: Subject:抽象角色,声明真实对象和代理对象的共同接口:     Proxy:代理角色,代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象鱼与真 实对象相同的接口以便在任何时刻都能代替真实对象.同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装.简言之,代理

设计模式之代理模式20170724

结构型设计模式之代理模式: 一.含义 代理模式也叫做委托模式,其定义如下: 为其他对象提供一种代理以控制对这个对象的访问. 二.代码说明 1.主要有两个角色 1)具体主题角色 也叫做委托角色.被代理角色.它是业务逻辑的具体执行者. 2)代理主题角色 也叫做委托类.代理类.它负责对真实角色的应用,把所有抽象主题类定义的方法限制委托给真实主题角色实现,并且在真实主题角色处理完毕前后做预处理和善后处理工作. 一个代理类可以代理多个被委托者或被代理者. 2.在用C实现过程中也是参考这种思想,以游戏代理场

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

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