上网在我们日常生活中是一件非常普通的事情,同样上网的方式多种多样。例如使用代理服务器上网,其中的代理服务器也会执行相应的操作如“检查用户是否合法或访问权限的限制”。但是用户唯一关心的就是上网,别的不管。在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();
}
}
代码写好了,现在看一下运行效果
还是一样啊,有问题希望大家指出来,一起交流。