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

原创 2016年08月31日 09:54:25

学习了简单工厂模式,策略模式,装饰者模式。设计原则有单一职责原则,开放-封闭原则,依赖倒置原则,里氏代换原则。学会使用才是关键,在自己做项目时,拿到一个需求,先对其进行结构分析,选用合适的设计模式,在编程时注意设计原则,经常使用就能把这些设计原则铭记于心。

直接进入主题,代理模式。

代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。


看一下基本代码。

abstract class Subject{
 public abstract void Request();
}
class RealSubject extends Subject{
 @Override
 public void Request(){
  //真实的请求
 }
}
class Proxy extends Subject{
 private RealSubject realSubject;
 @Override
 public void Request(){
  if(realSubject == null){
    realSubject = new RealSubject();
  }
  realSubject.Request();
 }
}

客户端代码

class MainActivity extends Activity{
 public void onCreate(){
  Proxy proxy = new Proxy();
  proxy.Request();
 }
}
接下来举个例子,应用一下代理模式。比如A同学要给C同学送礼物,但是C同学不认识A同学,怎么办呢,那么B同学就出现了。B和A是好朋友,B和C也认识。那么A要给C送礼物,可以通过B来实现这个需求。

按照依赖倒置原则,针对接口编程。

package com.abings.proxymodel.Proxy;

/**
 * Created by Shuwen on 2016/8/31.
 */
public interface GiftSubject {
    void giveFloors();
    void giveDolls();
    void giveLove();
}
接着是开放封闭原则。真正有需求的对象

package com.abings.proxymodel.Proxy;

import android.content.Context;
import android.widget.Toast;

/**
 * Created by Shuwen on 2016/8/31.
 */
public class RealSubjectPersonA implements GiftSubject {

    private String name;
    private Context context;
    public RealSubjectPersonA(String name,Context context){
        this.name = name;
        this.context = context;
    }

    @Override
    public void giveFloors() {
        Toast.makeText(context, "A先生送"+name+"小姐一束花。", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void giveDolls() {
        Toast.makeText(context, "A先生送"+name+"小姐一个玩具熊。", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void giveLove() {
        Toast.makeText(context, "A先生向"+name+"小姐表达爱意。", Toast.LENGTH_SHORT).show();
    }
}
接下来是代理对象

package com.abings.proxymodel.Proxy;

import android.content.Context;

/**
 * Created by Shuwen on 2016/8/31.
 */
public class ProxyPersonB implements GiftSubject {
    private RealSubjectPersonA realSubjectPersonA;
    public ProxyPersonB(PersonC personC,Context context){
        if (realSubjectPersonA == null){
            realSubjectPersonA = new RealSubjectPersonA(personC.getName(),context);
        }
    }

    @Override
    public void giveFloors() {
        realSubjectPersonA.giveFloors();
    }

    @Override
    public void giveDolls() {
        realSubjectPersonA.giveDolls();
    }

    @Override
    public void giveLove() {
        realSubjectPersonA.giveLove();
    }
}
这就是按照UML图设计出来的代码,简单易懂。(顺便告诉大家,追女孩子采用代理模式,最终的结果是代理那个人会成功追到手。苦不堪言的结局,面对爱情就是要用于表达,不然只有单身咯。不过,程序猿单身也是在正常不过的了。)
最后附上git地址:

https://github.com/SingleShu/ProxyModel#proxymodel




版权声明:【码字不易,转载请标明出处,http://blog.csdn.net/sw5131899的博客,欢迎转载】

架构师学习之路1设计模式

想学习基础在数据结构和设计模式之间犹豫了很久,最后还是决定先看一下常用的设计模式 参考书:Design Pattern-Head First 中文版 原则 封装变化 多用组合,少用继承 针对接口编程,...
  • zsr251
  • zsr251
  • 2015年06月30日 13:38
  • 407

设计模式:代理模式(Proxy)

代理模式:为其他对象提供一种代理以控制对这个对象的访问。 代理模式中的角色: 抽象主题角色(Subject):声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对...
  • u013256816
  • u013256816
  • 2016年03月29日 21:38
  • 4367

设计模式的学习之路 --- 第一站(模板模式)

前言: 作为设计模式里面最简单的设计模式之一,却被广泛使用的。作为学习设计模式的开篇真=真是再适合不过了。 这个设计模式之中仅仅使用了继承关系。虽然Java里面因为单继承、多实现的原因不建议过多的...
  • qq_27232757
  • qq_27232757
  • 2017年09月14日 15:01
  • 61

设计模式(结构型)之代理模式(Proxy Pattern)

代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据代理模式...
  • yanbober
  • yanbober
  • 2015年05月04日 18:48
  • 5683

【设计模式】代理模式详解

前言 博主只是一名大三学生,文章内容难免有不足之处,欢迎批评指正。   正文 转载请注明出处: http://blog.csdn.net/h28496/article/details/46707621...
  • H28496
  • H28496
  • 2015年07月01日 10:45
  • 1379

23种设计模式(6):代理模式

先看一个例子,是有关于打游戏杀怪兽的。 //先定义一个游戏者接口 public interface IGamePlayer { //登陆游戏 public void logi...
  • psp0001060
  • psp0001060
  • 2016年02月04日 22:05
  • 938

六 设计模式之代理模式(或称委托模式)

定义   为其它对象提供一种代理以控制对这个对象的访问类图通用代码 抽象主题类 public interface Subject { public void request(); } 真实主...
  • guojun828
  • guojun828
  • 2011年01月20日 23:26
  • 7152

最常用的设计模式---代理模式(C++实现)

代理模式:为其他对象提供一种代理以控制对这个对象的访问
  • lh844386434
  • lh844386434
  • 2014年01月09日 17:23
  • 2049

浅析JAVA设计模式之代理模式(二)

1 动态代理          在上一篇文章《浅析JAVA设计模式之代理模式(一)》中,已经简单介绍了代理模式的定义,以及分析和实现了静态代理类,接下来我们分析动态代理。     动态代理类:...
  • minidrupal
  • minidrupal
  • 2014年05月02日 22:14
  • 1614

JAVA设计模式之代理模式

【代理模式应用场景举例】 比如在玩“极品飞车”这款游戏,如果游戏者手中的金钱达到了一定的数量就可以到车店买一部性能更高的赛车,那么这个卖车的“车店”就是一个典型的“汽车厂家”的“代理”,他为汽车厂家...
  • jason0539
  • jason0539
  • 2014年04月05日 07:07
  • 23453
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式学习之路-代理模式
举报原因:
原因补充:

(最多只允许输入30个字)