开始系统的学习Java已经一个月了,最近学习了***这种设计模式,因为前面学的不太扎实被一段样例代码卡了一会儿,看来学习Java还得学扎实,不然会严重影响后面的学习进度。

首先说一下什么是***模式?

***模式的定义:***模式给某一个对象提供一个***对象,并由***对象控制对原对象的引用。举例说明,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而***对象可以在客户端和目标对象之前起到中介的作用。

现实应用举例

生活中使用到的***上网,客户通过网络***连接网络,由***服务器完成用户权限,访问限制等与上网操作相关的操作。

<figcaption> ***上网示意图 </figcaption>

不管是***操作也好,真实的操作也好,其共同的目的就是一个上网,所以用户关心的只是如何上网,至于里面是如何操作的用户并不关心。那么我们在下面就以此为例进行代码讲解

(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▽, ̄)╭ )