远程对象工厂设计模式
//Flight.java
package flight;
import java.rmi.*;
public interface Flight extends Remote{
//读取航班号
public String getFlightNumber()throws RemoteException;
//读取始发站
public String getOrigin()throws RemoteException;
//读取终点站
public String getDestination()throws RemoteException;
//读取计划出发时间
public String getSkdDeparture()throws RemoteException;
//读取计划到达时间
public String getSkdArrival()throws RemoteException;
public void setOrigin(String origin)throws RemoteException;
public void setDestination(String destination)throws RemoteException;
public void setSkdDeparture(String skdDeparture)throws RemoteException;
public void setSkdArrival(String skdArrival)throws RemoteException;
}
//FlightFactory.java
package flight;
import java.rmi.*;
public interface FlightFactory extends Remote{
public Flight getFlight(String flightNumber)throws RemoteException;
}
//
FlightImpl.java
package flight;
import java.rmi.*;
import java.rmi.server.*;
public class FlightImpl extends UnicastRemoteObject implements Flight{
protected String flightNumber;
protected String origin;
protected String destination;
protected String skdDeparture;
protected String skdArrival;
public FlightImpl(String aFlightNumber, String anOrigin,
String aDestination, String aSkdDeparture, String aSkdArrival)
throws RemoteException{
flightNumber = aFlightNumber;
origin = anOrigin;
destination = aDestination;
skdDeparture = aSkdDeparture;
skdArrival = aSkdArrival;
}
public String getFlightNumber()throws RemoteException{
System.out.println("调用getFilghtNumber(),返回"+flightNumber);
return flightNumber;
}
public String getOrigin()throws RemoteException{
return origin;
}
public String getDestination()throws RemoteException{
return destination;
}
public String getSkdDeparture()throws RemoteException{
return skdDeparture;
}
public String getSkdArrival()throws RemoteException{
return skdArrival;
}
public void setOrigin(String origin)throws RemoteException{
this.origin=origin;
}
public void setDestination(String destination)throws RemoteException{
this.destination=destination;
}
public void setSkdDeparture(String skdDeparture)throws RemoteException{
this.skdDeparture=skdDeparture;
}
public void setSkdArrival(String skdArrival)throws RemoteException{
this.skdArrival=skdArrival;
}
}
//FlightFactoryImpl.java
package flight;
import java.rmi.*;
import java.rmi.server.*;
import java.util.*;
public class FlightFactoryImpl extends UnicastRemoteObject
implements FlightFactory{
protected Hashtable<String,Flight> flights; //存放Flight对象的缓存
public FlightFactoryImpl()throws RemoteException{
flights = new Hashtable<String,Flight>();
}
public Flight getFlight(String flightNumber)throws RemoteException{
Flight flight = flights.get(flightNumber);
if (flight != null) return flight;
flight = new FlightImpl(flightNumber, null, null, null, null);
flights.put(flightNumber, flight);
return flight;
}
}
//SimpleClient.java
package flight;
import java.rmi.*;
import javax.naming.*;
public class SimpleClient{
public static void main(String[] args){
String url="rmi://localhost/";
try{
Context namingContext=new InitialContext();
FlightFactory factory=(FlightFactory)namingContext.lookup(url+"FlightFactory");
Flight flight1 = factory.getFlight("795");
flight1.setOrigin("Shanghai");
flight1.setDestination("Beijing");
System.out.println("Flight "+flight1.getFlightNumber()+":");
System.out.println("From "+flight1.getOrigin()+" to "+
flight1.getDestination());
Flight flight2 = factory.getFlight("795");
System.out.println("Flight "+flight2.getFlightNumber()+":");
System.out.println("From "+flight2.getOrigin()+" to "+
flight2.getDestination());
System.out.println("flight1是"+flight1.getClass().getName()+"的实例");
System.out.println("flight2是"+flight2.getClass().getName()+"的实例");
System.out.println("flight1==flight2:"+(flight1==flight2));
System.out.println("flight1.equals(flight2):"+(flight1.equals(flight2)));
}catch(Exception e){
e.printStackTrace();
}
}
}
//SimpleServer.java
package flight;
import java.rmi.*;
import javax.naming.*;
public class SimpleServer{
public static void main( String args[] ){
try{
FlightFactory factory = new FlightFactoryImpl();
Context namingContext=new InitialContext();
namingContext.rebind( "rmi:FlightFactory", factory );
System.out.println( "服务器注册了一个FlightFactory对象" );
}catch(Exception e){
e.printStackTrace();
}
}
}

浙公网安备 33010602011771号