Java设计模式-简单工厂(Simple Factory)模式

介绍

简单工厂(Simple Factory)模式,又称为静态工厂方法(Static Factory Method)模式。
由一个工厂类来创建具体产品,即创建具体类的实例。

简单工厂模式从概念上涉及三个角色:

  • 抽象产品角色:是具体类的父类,规定了所有类的共同行为。一般是抽象类、或者接口。
  • 具体产品角色 :是具体的实现类,继承父类、或者实现父接口。
  • 工厂类角色:提供静态方法,即工厂方法,供客户端调用,根据传入的参数,来创建具体的产品,即具体类的实例化。工程类提供的工厂方法可以有多个。

当然,上面的三个角色是从概念上进行划分的,在具体实现上,有些角色可以合并。

这个模式通过一个工厂类隔开了客户端和具体的产品类。如果增加新的产品,客户端可以不修改,但工厂类必须修改。

代码示例

// 定义了一个接口
package com.thb;

public interface Shape {

	// 面积
	double area();
	
	// 周长
	double perimeter();
}


// 一个具体实现类:圆
package com.thb;

public class Circle implements Shape {

	// 半径
	private double r;
	
	public double area() {
		System.out.println("圆的面积");
		return Math.PI * Math.pow(r, 2);
	}
	
	public double perimeter() {
		System.out.println("圆的周长");
		return 2 * Math.PI * r;
	}
	
	// 设置半径
	public void setRadius(double r) {
		this.r = r;
	}
}


// 具体实现类:矩形
package com.thb;

public class Rectangle implements Shape {

	// 长
	private double length;
	// 宽
	private double width;
	
	public double area() {
		System.out.println("矩形的面积");
		return length * width;
	}
	
	public double perimeter() {
		System.out.println("矩形的周长");
		return 2 * (length + width);
	}
	
	// 设置长和宽
	public void setLengthAndWidth(double length, double width) {
		this.length = length;
		this.width = width;
	}
}


// 定义一个工厂类ShapeFactory 
package com.thb;

public class ShapeFactory {

    // 一个静态工厂方法
	public static Shape getInstance(String shapeName) {
		if (shapeName == "circle") {
			return new Circle();
		} else if (shapeName == "rec") {
			return new Rectangle();
		} else {
			return null;
		}
	}
}


// 客户端
package com.thb;

public class Test1 {
		
	public static void main(String[] args) {
		Shape circle = ShapeFactory.getInstance("circle");
		Shape rectangle = ShapeFactory.getInstance("rec");
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值