二十三种设计模式(java版)之Factory Method

目的:

工厂对象通常包含一个或多个方法,用来创建这个工厂所能创建的各种类型的对象。这些方法可能接收参数,用来指定对象创建的方式,最后返回创建的对象。

有时,特定类型对象的控制过程比简单地创建一个对象更复杂。在这种情况下,工厂对象就派上用场了。工厂对象可能会动态地创建产品对象的类,或者从对象池中返回一个对象,或者对所创建的对象进行复杂的配置,或者应用其他的操作。

元素:

Product(产品):接口,提供产品的共有方法。
Creator(生产者):接口,通常所说的Factory,具有创建对象的接口方法。
ConcreteProduct(实际产品):实现产品接口,提供具体的产品具有的方法以及属性。
ConcreteCreator(实际生产者):实现生产者接口,实现创建对象的接口方法,描述对象的具体创建过程。

类图:


示例代码:

factory.java
public interface Factory {
	abstract Button createButton();
}

button.java
public interface Button {
	abstract void clickEvent();
}

WinButtonFactory.java
public class WinButtonFactory implements Factory{

	@Override
	public Button createButton() {
		// TODO Auto-generated method stub
		Button winbtn = new WinButton("winbtn");
		return winbtn;
	}

}

WinButton.java
public class WinButton implements Button{

	private String btn_name;
	
	public WinButton(String name)
	{
		this.btn_name = name;
	}
	
	@Override
	public void clickEvent() {
		// TODO Auto-generated method stub
		System.out.println(this.btn_name);
	}

}

MacButtonFactory.java
public class MacButtonFactory implements Factory{

	@Override
	public Button createButton() {
		// TODO Auto-generated method stub
		Button macbtn = new MacButton("1");
		return macbtn;
	}

}

MacButton.java
public class MacButton implements Button{

	private String btn_id;
	
	public MacButton(String id)
	{
		this.btn_id = id;
	}
	
	@Override
	public void clickEvent() {
		// TODO Auto-generated method stub
		System.out.println(this.btn_id);
	}

}

TestFactory.java
public class TestFactory {
	public static void main(String[] args)
	{
		Factory factory1 = new WinButtonFactory();
		Button btn1 = factory1.createButton();
		btn1.clickEvent();
		
		Factory factory2 = new MacButtonFactory();
		Button btn2 = factory2.createButton();
		btn2.clickEvent();
		
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值