浅谈工厂方法模式介绍

工厂方法模式介绍

介绍

工厂方法模式:定义一个用来创建对象的接口,让子类决定实例化哪一个类,让子类决定实例化延迟到子类。工厂方法模式是针对每个产品提供一个工厂类,在客户端中判断使用哪个工厂类去创建对象

UML
在这里插入图片描述

总结

对于简单工厂模式而言,创建对象的逻辑判断放在了工厂类中,客户不感知具体的类,但是其违背了开闭原则,如果要增加新的具体类,就必须修改工厂类。
对于工厂方法模式而言,是通过扩展来新增具体类的,符合开闭原则,但是在客户端就必须要感知到具体的工厂类,也就是将判断逻辑由简单工厂的工厂类挪到客户端。

实例

package HomeWork2;

public interface Shape {
	public void printShape();

}


package HomeWork2;

public class Line implements Shape{
	public void printShape(){
		System.out.print("this is Line");
	}
}

package HomeWork2;

public class Rectangle implements Shape{
	public void printShape(){
		System.out.print("this is Rectangle");
	}
}

package HomeWork2;

public class Round implements Shape{
	public void printShape(){
		System.out.print("this is Round");
	}

}

package HomeWork2;

public interface ShapeFactory {
	public Shape createShape();
}

```java
package HomeWork2;

public class RectangleFactory implements ShapeFactory{
	public Shape createShape(){
		return new Rectangle();
	}
}

package HomeWork2;

public class RoundFactory implements ShapeFactory{
	public Shape createShape(){
		return new Round();
	}
}

package HomeWork2;

public class LineFactory implements ShapeFactory{
	public Shape createShape(){
		return new Line();
	}

}

package HomeWork2;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
enum ape{
	Line,Rectangle,Round;
	public static ape getshape(String ss){
		return valueOf(ss);
	}
}
public class Client {
	public void draw(Shape s){
		System.out.println("I draw a Shape");
		s.printShape();
	}
	public void showlist(List<Shape> shape){
		System.out.println();
		System.out.println("现在画板里有:");
		Shape t;
		for(int i=0;i<shape.size();i++){
			t=shape.get(i);
			System.out.print("<");
			t.printShape();
			System.out.print(">");
			if((i+1)%2==0) System.out.println();
		}
		System.out.println();
		
	}
	public void printMenu(){
		System.out.println("1:添加图形");
		System.out.println("2:删除图形");
		System.out.println("3:退出");
		
	}
	public List<Shape> delete(List<Shape> shape){
		shape.remove(shape.size()-1);
		return shape;
	}
	public void operate(){
		//ShapeFactory sf=new ShapeFactory();
		List<Shape> shape=new ArrayList<>();
		Scanner scanner=new Scanner(System.in);
		while(true)
		{   //System.out.println("----------------------------------------------");
			System.out.println("请选择你需要的功能:");
			printMenu();
			ShapeFactory sf=null;
			int id=scanner.nextInt();
			switch(id){
			case 1:	System.out.println("请输入你要画的图形:");
			        String type=scanner.next();
			        switch(ape.getshape(type)){
					case Line:sf=new LineFactory();break;
					case Rectangle:sf=new RectangleFactory();break;
					case Round:sf=new RoundFactory();break;
			        default:System.out.println("请拼写正确的图形!");
			        }
					Shape s=sf.createShape();
					draw(s);
					shape.add(s);
					showlist(shape);
					break;
			case 2:System.out.print("删除上一次所画的图形:");
			       shape=delete(shape);
			       showlist(shape);
			       break;
			case 3:return;
			default:System.out.println("请输入正确的服务号!");
			}
		}
	}
	

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Client c=new Client();
		c.operate();

	}

}

`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值