`
五月天
  • 浏览: 21204 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

工厂方法模式

阅读更多

工厂方法模式是是简单工厂的进一步抽象和推广。由于使用了多态,工厂方法保持了简单工厂模式的优点,而且克服了它的缺点。

工厂方法模式的类图:

在一个真实的系统中,会有多于一个的产品等级结构,此时可以将工厂方法应用到这个系统中,按照产品等级结构设计一个同结构的工厂等级结构。

一个例子:请使用工厂方法设计创建一个不同几何形状,如圆形,方形和三角形实例的描图员(Art Tracer),针对于圆形有圆形的描图员,对于方形有方形的描图员。。。
系统。每个几何图形都要有画图draw()和擦去erase()两个方法

抽象产品:

/**
 * 抽象出来的工厂类
 */
public interface Shape {

	//画图形
	public void draw();

	//擦去
	public void erase();
	
}

 三个具体产品:

public class Circle implements Shape {

	@Override
	public void draw() {
		System.out.println("Circle.draw()");

	}

	@Override
	public void erase() {
		System.out.println("Circle.erase()");

	}

}

public class Square implements Shape {

	@Override
	public void draw() {
		System.out.println("Square.draw()");

	}

	@Override
	public void erase() {
		System.out.println("Square.erase()");
	}

}

public class Triangle implements Shape {

	//画图形
	public void draw(){
		System.out.println("Triangle.draw()");
	}

	//擦去
	public void erase(){
		System.out.println("Triangle.erase()");
	}
}

 

抽象工厂:

 

public interface ArtTracer {

	public Shape getService();
	
}

 三个具体工厂,分别对应三个具体产品:

public class CircleTracer implements ArtTracer {

	@Override
	public Shape getService() {
		return new Circle();
	}

}

public class SquareTracer implements ArtTracer {

	@Override
	public Shape getService() {
		return new Square();
	}

}

public class TriangleTracer implements ArtTracer {

	@Override
	public Shape getService() {
		return new Triangle();
	}

}

 

客户端:

public class Client {

	public static void main(String[] args) {
		ArtTracer artTracer = new CircleTracer();
		artTracer.getService().draw();
		artTracer.getService().erase();
		System.out.println("-----------------------");
		
		artTracer = new SquareTracer();
		artTracer.getService().draw();
		artTracer.getService().erase();
		System.out.println("-----------------------");
		
		artTracer = new TriangleTracer();
		artTracer.getService().draw();
		artTracer.getService().erase();
	}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics