代理模式基础
来源:互联网 发布:应用商店软件下载 编辑:程序博客网 时间:2024/06/11 00:05
代理模式是一种使用率非常高的模式,定义如下:
为其他对象 提供一种代理以控制这个对象的访问。
Subject类主题类的通用源码:
/* * 抽象主题类 */public interface Subject { //定义一个方法 public void request();}
/* * * 真实主题类 */public class RealSubject implements Subject { // 实现方法 public void request() { // TODO Auto-generated method stub //业务逻辑处理 }}
/* * * 代理类 */public class Proxy implements Subject { //要代理那个实现类 private Subject subject =null; //默认被代理者 public Proxy() { // TODO Auto-generated constructor stub this.subject=new Proxy(); } //通过构造函数传递代理者 public Proxy(Subject subject){ this.subject=subject; } public void request() { // TODO Auto-generated method stub this .before(); this.subject.request(); this.after(); } //预处理 private void before() { // TODO Auto-generated method stub System.out.println("do something before"); } //善后处理 private void after() { // TODO Auto-generated method stub System.out.println("do something after"); }}
/* * 场景类 */public class Client { public static void main(String[] args) { //真实主题 RealSubject r=new RealSubject(); r.request(); //代理 Proxy p=new Proxy(r); p.request(); }}
例:游戏找人代打
/* * 游戏者接口 * */public interface IGamePlayer { //登录游戏 public void login(String user,String password); //杀怪 public void killBoss(); //升级 public void upgrade();}
/* * * 游戏者 */public class GamePlayer implements IGamePlayer { public String name=""; //构造函数 public GamePlayer(String mname) { // TODO Auto-generated constructor stub this.name=mname; } public void login(String user, String password) { // TODO Auto-generated method stub System.out.println("登录名为"+user+"用户名为"+name+"登陆成功"); } public void killBoss() { // TODO Auto-generated method stub System.out.println(this.name+"在打怪"); } public void upgrade() { // TODO Auto-generated method stub System.out.println(this.name+"有升了一级"); }}
/* * * 代练者 */public class GamePalyerProxy implements IGamePlayer { private IGamePlayer gamePlayer=null; //通过构造函数传递要对谁进行代练 public GamePalyerProxy(IGamePlayer mgamePlayer) { // TODO Auto-generated constructor stub this.gamePlayer=mgamePlayer; } public void login(String user, String password) { // TODO Auto-generated method stub this.gamePlayer.login(user, password); } public void killBoss() { // TODO Auto-generated method stub this.gamePlayer.killBoss(); } public void upgrade() { // TODO Auto-generated method stub this.gamePlayer.upgrade(); }}
/* * * 场景类 */public class Client { public static void main(String[] args) { // TODO Auto-generated method stub //定义一个痴迷的玩家 IGamePlayer player=new GamePlayer("张三"); //然后定义一个代练者 IGamePlayer proxy=new GamePalyerProxy(player); //开始打游戏 proxy.login("zhangsan", "123456"); //打怪 proxy.killBoss(); //升级 proxy.upgrade(); }}
优点:
职责清晰;
高扩展性;
智能化;
1 0
- 代理模式之基础
- 代理模式(基础)
- 代理模式基础
- 代理模式基础篇
- 代理模式基础学习
- Java基础之代理模式
- Spring AOP基础:代理模式
- java基础与基础加强 动态代理/代理模式
- 基础加强学习总结之代理模式
- OC基础—代理模式设计
- Java基础——代理模式
- OC基础—代理设计模式
- Java基础--代理模式(静态、动态)
- 黑马程序员:Java基础总结----静态代理模式&动态代理
- 设计模式--学习笔记--代理模式Proxy--基础篇
- 【设计模式基础】结构型模式 - 7 - 代理(Proxy)
- Java设计模式之代理模式(基础篇)
- Java设计模式之代理模式(动态代理-基础篇)
- Java下利用Jackson进行JSON解析和序列化
- Jpa之与Spring整合
- Python安装nltk模块
- {题解}[jzoj3749]【Srm590】Fox And City(fox)
- React-Native 之 项目实战(五)
- 代理模式基础
- xml命名空间和XSD
- SDP协议分析
- 1038. 统计同成绩学生(20)
- 单例模式
- 8、requestCode 和resultCode+9、activity的生命周期+10、activity生命周期的三大分类
- Mapped Statements collection does not contain value for com.mybatis_Spring.dao.getAllUsers
- 不同的路径
- 静态内部类、静态变量的加载次数-理解静态内部类实现线程安全的单例模式