一、Shape类实现了Serializable,所有从Shape继承的类都会自动可序列化,
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
abstract class Shape implements Serializable{
public static final int RED=1, BLUE=2, GREEN=3;
private int xPos, yPos, dimension;
private static Random r = new Random();
private static int counter = 0;
abstract public void setColor(int newColor);
abstract public int getColor();
public Shape(int xVal, int yVal, int dim) {
xPos = xVal;
yPos = yVal;
dimension = dim;
}
public String toSrting(){
return getClass().toString() + "color[" + getColor() + "] xPos["
+ xPos + "] yPos[" + yPos + "]dim[" + dimension + "]\n";
}
public static Shape randomFactory(){
int xVal = r.nextInt() % 100;
int yVal = r.nextInt() % 100;
int dim = r.nextInt() % 100;
switch (counter++ % 3) {
default:
case 0:return new Circle(xVal, yVal, dim);
case 1:return new Square(xVal, yVal, dim);
case 2:return new Line(xVal, yVal, dim);
}
}
}
class Circle extends Shape{
private static int color = RED;
public Circle(int xVal, int yVal, int dim) {
super(xVal, yVal, dim);
}
@Override
public void setColor(int newColor) {
color = newColor;
}
@Override
public int getColor() {
return color;
}
}
class Square extends Shape{
private static int color;
public Square(int xVal, int yVal, int dim) {
super(xVal, yVal, dim);
color = RED;
}
@Override
public void setColor(int newColor) {
color = newColor;
}
@Override
public int getColor() {
return color;
}
}
class Line extends Shape{
private static int color = RED;
public static void serilizeStaticState(ObjectOutputStream os) throws IOException{
os.writeInt(color);
}
public static void deserilizeStaticState(ObjectInputStream os) throws IOException{
color = os.readInt();
}
public Line(int xVal, int yVal, int dim) {
super(xVal, yVal, dim);
}
@Override
public void setColor(int newColor) {
color = newColor;
}
@Override
public int getColor() {
return color;
}
}
public class CADState {
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
List shapeTypes, shapes;
if(args.length == 0){
shapeTypes = new ArrayList();
shapes = new ArrayList();
shapeTypes.add(Circle.class);
shapeTypes.add(Shape.class);
shapeTypes.add(Line.class);
for(int i=0; i<10; i++){
shapes.add(Shape.randomFactory());
}
for(int i=0; i<10; i++){
((Shape)shapes.get(i)).setColor(Shape.GREEN);
}
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("CADState.out"));
out.writeObject(shapes);
}else{
ObjectInputStream is = new ObjectInputStream(new FileInputStream(args[0]));
shapeTypes = (List)is.readObject();
Line.deserilizeStaticState(is);
shapes = (List)is.readObject();
}
System.out.println(shapes);
}
}