`
lianggl2008
  • 浏览: 25587 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

工厂方法模式

 
阅读更多
public abstract class Shape {
	public abstract void draw();
	
	public abstract void erase();
	
	public String name;
	
	public Shape(String aName) {
		name = aName;
	}
}

public class Circle extends Shape {

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("It will draw a circle.");
	}

	@Override
	public void erase() {
		// TODO Auto-generated method stub
		System.out.println("It will erase a circle.");
	}
	
	public Circle(String aName) {
		super(aName);
	}

}

public class Square extends Shape {

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("It will draw a square.");
	}

	@Override
	public void erase() {
		// TODO Auto-generated method stub
		System.out.println("It will erase a square.");
	}
	
	public Square(String aName) {
		super(aName);
	}

}

public abstract class ShapeFactory {
	protected abstract Shape factoryMethod(String aName);

	public void anOperation(String aName) {
		Shape s = factoryMethod(aName);
		System.out.println("The current shape is: " + s.name);
		s.draw();
		s.erase();
	}
}

public class CircleFactory extends ShapeFactory {

	@Override
	protected Shape factoryMethod(String aName) {
		// TODO Auto-generated method stub
		return new Circle(aName + " (created by CircleFactory)");
	}

}

public class SquareFactory extends ShapeFactory {

	@Override
	protected Shape factoryMethod(String aName) {
		// TODO Auto-generated method stub
		return new Square(aName + " (created by SquareFactory)");
	}

}

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ShapeFactory sf1 = new SquareFactory();
		ShapeFactory sf2 = new CircleFactory();
		sf1.anOperation("Shape one");
		sf2.anOperation("Shape two");
	}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics