博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA设计模式之——代理模式
阅读量:6311 次
发布时间:2019-06-22

本文共 2706 字,大约阅读时间需要 9 分钟。

hot3.png

代理模式应用场景举例

比如在玩“极品飞车”这款游戏,如果游戏者手中的金钱达到了一定的数量就可以到车店买一部性能更高的赛车,那么这个卖车的“车店”就是一个典型的“汽车厂家”的“代理”,他为汽车厂家“提供卖车的服务”给有需求的人士。从面向对象的方面考虑,“销售汽车的代理”也是一个对象,那么这个对象也具有一定的状态,在软件项目中这个对象也具有管理财务进销存的基本功能,那么在设计时就要以面向OOP编程的思想来考虑软件的类结构,这个销售汽车的代理也是一个类了。

【代理模式解释】

类型:结构模式

对一些对象提供代理,以限制那些对象去访问其它对象。

代理模式-JAVA代码实现

新建一个买车的接口:

public interface buy_car {    public void buy_mycar();  }

新建一个people人类,具有买车的行为,所以实现接口buy_car

class people implements buy_car {        private int cash;     private String vip;     private String username;       @Override   public void buy_mycar() {    // TODO Auto-generated method stub    System.out.print(username+"是vip 客户,可以直接购买新车!");   }    public int getCash(){        return cash;     }     public void setCash(int cash){         this.cash = cash;      }     public String getUsername(){         return username;      }     public void setUsername(String username){         this.username = username;      }     public String getVip(){         return vip;      }     public void setVip(String vip){          this.vip = vip;     }  }

people类不能拥有车,必须经过proxy代理类的认证,符合条件之后才可以拥有车辆,新建一个代理,这个代理类来考察当前的people是否有资格进行买车:

class proxyclass implements buy_car {           private people people;      public people getPeople(){       return people;      }      public void setPeople(people people){       this.people = people;      }         @Override   public void buy_mycar() {    // TODO Auto-generated method stub        if (people.getVip() == "vip"){        people.buy_mycar();        return ;       }       if(people.getCash()>=50000){       System.out.println(people.getUsername()+"买了新车,交易结束!");      }      else      {       System.out.println(people.getUsername()+"钱不够,不能买车,继续比赛!");      }   }  }

最后创建一个客户端,用来模拟买车的行为:

public class run_main {       public static void main(String[] args) {    // TODO Auto-generated method stub        people people_1 =new people();        people_1.setCash(60000);        people_1.setUsername("jeck");            people people_2 =new people();        people_2.setCash(40000);        people_2.setUsername("rose");               people people_3 =new people();          people_3.setCash(0);        people_3.setUsername("tom");        people_3.setVip("vip");               proxyclass proxy_buy = new proxyclass();        proxy_buy.setPeople(people_1);        proxy_buy.buy_mycar();               proxy_buy.setPeople(people_2);        proxy_buy.buy_mycar();               proxy_buy.setPeople(people_3);        proxy_buy.buy_mycar();                }    }

程序运行结果如下:

jeck买了新车,交易结束!  rose钱不够,不能买车,继续比赛!  tom是vip 客户,可以直接购买新车!

代理模式主要使用了java的多态干活的是被代理类,代理类主要是接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥都清楚得很,同样一个接口。

 

转载于:https://my.oschina.net/LucasZhu/blog/1548464

你可能感兴趣的文章
Java:将字符串中的数字转换成整型
查看>>
大数据的那些事儿
查看>>
靠谱的网站专题页seo优化技巧
查看>>
试玩GitHub
查看>>
libffi浅析
查看>>
工具介绍:使用CACTUSTORCH 生成Payload
查看>>
在企业级数据中心市场,你属于哪类用户?
查看>>
从0到1:如何迈好深度学习第一步?
查看>>
西门子:四步助企业走向数字化
查看>>
从幼苗长成大树 中美两国GIS软件技术已并驾齐驱
查看>>
东方通助力浙江大数据+政务 实现便民“一网通”
查看>>
如何成为一个糟糕的程序员
查看>>
“史上最难抢票季”已开幕 抢票软件成勒索“利器”
查看>>
《中国人工智能学会通讯》——7.17 篇章语义分析方法概述
查看>>
人工智能爆发 投资者纷纷涌入创业企业
查看>>
Radware:金融机构如何应对日益猖獗的网络攻击
查看>>
Java中注释的使用是有原则的
查看>>
SanDisk研发32nm工艺最小尺寸NAND闪存
查看>>
阿里云推视频云解决方案 窄带高清省流量
查看>>
加速老旧Ubuntu系统的九大技巧
查看>>