上网在我们日常生活中是一件非常普通的事情,同样上网的方式多种多样。例如使用代理服务器上网,其中的代理服务器也会执行相应的操作如“检查用户是否合法或访问权限的限制”。但是用户唯一关心的就是上网,别的不管。在java中就把这种情况叫做代理。
上面这个例子大家懂可以看懂,下面我们就来写一段程序模拟一下这个场景,这里提供了2中方法来供大家参考:
1.我们先来定义一个接口NetWork,里面定义一个browse方法。
package org.lxh.dao; //NetWork接口定义了一个方法browse public interface NetWork { public abstract void browse(); }
2.写一个真实主题类,代码如下所示。
package org.lxh.impl; import org.lxh.dao.NetWork; public class SurfTheInternet implements NetWork { /* * author chenwill3 */ public void browse() { //定义真实的上网操作 System.out.println("上网浏览信息"); } }
3.写一个代理类进行代理上网
package org.lxh.impl; import org.lxh.dao.NetWork; public class SurfTheInternetProxy implements NetWork{ NetWork net; public SurfTheInternetProxy(NetWork net) //设置代理的真实操作 { this.net=net; //设置代理的子类 } public void check() { System.out.println("检查用户是否合法"); } public void browse() { check(); this.net.browse(); //调用真实的上网操作 } }
4.写一个测试类查看效果
package test; import org.lxh.dao.NetWork; import org.lxh.impl.SurfTheInternet; import org.lxh.impl.SurfTheInternetProxy; import factory.NetFactory; public class Test { /** * 测试类 */ public static void main(String[] args) { NetWork work=null; work=new SurfTheInternetProxy(new SurfTheInternet()); work.browse(); } }
下面我就把工厂方法和代理模式结合起来,使之达到相同的效果
下面写一个工厂类,代码如下
package factory; import org.lxh.dao.NetWork; import org.lxh.impl.SurfTheInternet; import org.lxh.impl.SurfTheInternetProxy; public class NetFactory { //工厂类 public static NetWork getInstance() { return new SurfTheInternetProxy(new SurfTheInternet()); } }
修改上面的测试类,也可达到相同的效果
package test; import org.lxh.dao.NetWork; import org.lxh.impl.SurfTheInternet; import org.lxh.impl.SurfTheInternetProxy; import factory.NetFactory; public class Test { /** * 测试类 */ public static void main(String[] args) { NetFactory.getInstance().browse(); } }
代码写好了,现在看一下运行效果
还是一样啊,有问题希望大家指出来,一起交流。