开始系统的学习Java已经一个月了,最近学习了***这种设计模式,因为前面学的不太扎实被一段样例代码卡了一会儿,看来学习Java还得学扎实,不然会严重影响后面的学习进度。
首先说一下什么是***模式?
***模式的定义:***模式给某一个对象提供一个***对象,并由***对象控制对原对象的引用。举例说明,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而***对象可以在客户端和目标对象之前起到中介的作用。
现实应用举例
生活中使用到的***上网,客户通过网络***连接网络,由***服务器完成用户权限,访问限制等与上网操作相关的操作。
不管是***操作也好,真实的操作也好,其共同的目的就是一个上网,所以用户关心的只是如何上网,至于里面是如何操作的用户并不关心。那么我们在下面就以此为例进行代码讲解
(1)定义一个上网的接口
interface Network{ // 定义Network接口
public void browse() ; // 定义浏览的抽象方法
}
(2)声明一个真实上网的类,继承上网接口
class Real implements Network{ // 真实的上网操作
public void browse(){ // 覆写抽象方法
System.out.println("上网浏览信息") ;
}
}
(3)声明一个***上网的类,继承上网接口
class Proxy implements Network{ // ***上网
private Network network ;
public Proxy(Network network){ //构造函数通过传入通过真实上网类实例化的对象进行设置***的真实操作
this.network = network ; // 设置***的子类
}
public void check(){ // 与具体上网相关的操作
System.out.println("检查用户是否合法");
}
public void browse(){ //覆写抽样方法
this.check() ; // 可以同时调用多个与具体业务相关的操作
this.network.browse() ; //表示当前调用的真实上网对象的browse方法,这里不明白的可以看我关于this关键字的文章
}
}
(4)声明一个客户端的类,进行测试
public class ProxyDemo{
public static void main(String args[]){
Real r = new Real(); //实例化一个Real类对象,用来将真实操作传入***
Network net = new Proxy(r); //通过Proxy子类实例化接口
net.browse(); //当前net是通过Proxy子类实例化的对象,所以这里调用的是Proxy类中的browse方法
}
}
程序运行结果:
检查用户是否合法
上网浏览信息
***操作流程
通过***实现权限控制
通过上面的例子,我们可能会有这样的疑问,为什么干脆不直接上网,干嘛非得要通过一种***的模式去上网的。当然可以,如果在使用场景中实现类能满足要求时,我们当然可以直接实现类,但当实现类不能满足要求,要扩展需求,根据开闭原则你又不能修改实现类代码,这时你就用***类。比如现在不想让你去浏览一些网站,就可以通过***机制来进行一个筛选过程,将一些网站过滤掉,然后再反馈给你想让你浏览的网站,来实现一个权限控制。(当然,我们可以通过课|学|尚|往来解决这个问题,以后有时间写一篇关于这个的详细教程( ̄y▽, ̄)╭ )