Java设计模式(一)工厂模式到底是个什么鬼

Java设计模式之工厂模式及实例

一、What&Why

工厂模式(Factory Pattern) 是Java中最常用的设计模式之一。在工厂模式中,我们在创建对象是不会对客户端暴露创建逻辑,并且通过使用一个共同的接口来指向新创建的对象,创建过程在其子类中执行。
在工厂模式下如果想增加产品,只要扩展工厂类就可以了,这样提高了系统的可扩展性;对调用者来说,屏蔽了产品的具体实现,只为其提供接口,降低了系统的耦合性。

耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块之间越独立则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。

二、Sample

在星云图书馆购买图书时有三种赠品可以选择,分别是:CD包装袋钢笔。我们创建一个附赠品工厂类一个附赠品抽象类三种附赠品各对应一个子类继承与附赠品抽象类

1. 附赠品工厂类

只有一个创建附赠品的静态方法creat(int id),返回值是一个附赠品对象

public class ExFactory {
	public static EX create(int id) {//使用静态方法提高运行效率
		switch(id) {
		case 1:
			return new CD();
		case 2:
			return new Pen();
		case 3:
			return new Bag();
		default:
			return null;
		}
	}
}
2. 附赠品类(抽象类)
public abstract class EX {
	
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public String getEx_name() {
		return ex_name;
	}
	public void setEx_name(String ex_name) {
		this.ex_name = ex_name;
	}
	private double price;	//价格
	private String ex_name; //名称
	
	public double cost() {
		System.out.print("附赠品:");
		System.out.print(ex_name+":"+price);
		System.out.println("===============");
		return price;
	}
}
3. 三个子类
(1)CD
public class CD extends EX{
	public CD() {
		this.setEx_name("CD");
		this.setPrice(10.00);
	}
}
(2)Pen
public class Pen extends EX{
	public Pen() {
		this.setEx_name("钢笔笔");
		this.setPrice(20.00);
	}
}
(3)Bag
public class Bag extends EX{
	public Bag() {
		this.setEx_name("包装袋儿");
		this.setPrice(1.50);
	}
}

三、使用

在测试类里,购买附赠品时有这样一段代码:(可忽略无关代码逻辑)

System.out.print("1.CD 27.50元   2.包装  2.70元   3.钢笔 10元  4.不需要");
System.out.println("请输入需要购买的附赠品:");
int exCode = input.nextInt();
if (exCode >= 1 && exCode <= 4) {
	//使用工厂模式的create()函数生成一个所选择的附赠品对象
	EX ex = user.buyEx(exCode);
	book.setEx(ex);
	user.checkout(book);
}

这样,只用一行简单的语句,就构造出了一个附赠品对象,无须传价格等参数,隐藏了许多创建逻辑。如果之后书店又推出新的附赠品(比如便签纸),只需要再写一个子类继承EX类、在create()函数的switch语句里增加一个case即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值