远程对象工厂设计模式

//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();
    } 
  }
}

 

 

posted @ 2018-12-01 14:02  lomt5  阅读(137)  评论(0)    收藏  举报