java设计模式之工厂方法模式

原创 2016年08月29日 14:13:07

接上文,说道简单工厂模式.有一个缺点是如果实体类型过多的时候或者层级结构大于两层时,整个工厂类会显得特别臃肿.

这里说的层级结构:比如,手机分为新旧款式  而新旧中还有品牌 等等...

而这里用到工厂方法模式(虚拟构造模式或者多态性工厂)


简单工厂和工厂方法模式 都是为我们解决 代码过度耦合的问题,为我们提供类似于中间调度的中间件.

如果你明确你的实体类型结构不会太过复杂,你还是可以选择简单工厂模式.


==========简单的说就是我们把工厂类抽象出来,提供不同的实现============

实例接口

/**
 * @类名 Phone.java
 * @作者  zx
 * @创建日期 2016年8月29日
 * @描述 实体类接口
 * @版本 V 1.0
 */
public interface Phone {
	void call();
}

实体类

/**
 * 
 * @类名 OldPhone.java
 * @作者  zx
 * @创建日期 2016年8月29日
 * @描述 老式手机
 * @版本 V 1.0
 */
public class OldPhone implements Phone{
	private String brand;
	
	public OldPhone(String brand) {
		this.brand = brand;
	}
	@Override
	public void call() {
		System.out.println(brand+"牌这里添加旧手机的业务");
	}
}
/**
 * @类名 NewPhone.java
 * @作者 zx  
 * @创建日期 2016年8月29日
 * @描述 新式手机
 * @版本 V 1.0
 */
public class NewPhone implements Phone{
	private String brand;
	
	public NewPhone(String brand) {
		this.brand = brand;
	}
	@Override
	public void call() {
		System.out.println(brand+"牌这里添加新手机的业务");
	}
}

工厂接口类

/**
 * 
 * @包名 zx.in.ibm.factory_method
 * @类名 PhoneFactory.java
 * @作者 zx
 * @创建日期 2016年8月29日
 * @描述 抽象出来的工厂类
 * @版本 V 1.0
 */
public interface PhoneFactory {
	Phone getInstance(String type);
}
工厂接口实现

/**
 * 
 * @包名 zx.in.ibm.factory_method
 * @类名 IPhoneFactory.java
 * @作者 zx 
 * @创建日期 2016年8月29日
 * @描述 苹果手机工厂实现
 * @版本 V 1.0
 */
public class IPhoneFactory implements PhoneFactory {

	@Override
	public Phone getInstance(String type) {
		if("old".equals(type)){
			return new OldPhone("苹果");
		}else if("new".equals(type)){
			return new NewPhone("苹果");
		}else{
			throw new RuntimeException("没有对应实例");
		}
	}

}


/**
 * 
 * @包名 zx.in.ibm.factory_method
 * @类名 MIUPhoneFactory.java
 * @作者 zx
 * @创建日期 2016年8月29日
 * @描述 小米手机工厂实现
 * @版本 V 1.0
 */
public class MIUPhoneFactory implements PhoneFactory {

	@Override
	public Phone getInstance(String type) {
		if("old".equals(type)){
			return new OldPhone("小米");
		}else if("new".equals(type)){
			return new NewPhone("小米");
		}else{
			throw new RuntimeException("没有对应实例");
		}
	}
}

测试:

public class TestMain {
	public static void main(String[] args) {
		PhoneFactory factory = new MIUPhoneFactory();
		Phone phone = factory.getInstance("new");
		phone.call();
	}
}

运行代码结果:小米牌这里添加新手机的业务

版权声明:本文为博主原创文章,未经博主允许不得转载。

java设计模式之工厂方法模式

  • 2011年03月05日 15:13
  • 430KB
  • 下载

设计模式之工厂方法模式

  • 2017年08月23日 19:43
  • 22KB
  • 下载

JAVA设计模式之 工厂方法模式【Factory Method Pattern】

一、概述 二、适用场景 三、U

设计模式——工厂方法模式

  • 2013年08月10日 15:56
  • 8KB
  • 下载

设计模式之工厂方法模式

  • 2014年08月17日 14:52
  • 40KB
  • 下载

JAVA设计模式(1) —<创建型>工厂方法模式(Factory Method)

1 定义: 工厂方法模式(Factory Method) Define an interface for creating an object, but let subclasses decide ...

设计模式之工厂方法模式

  • 2014年04月23日 11:24
  • 32KB
  • 下载

Java设计模式---工厂方法模式(Factory-Method)

一、普通的工厂模式 建立一个工厂类,对实现了同一接口的一些类进行实例的创建 实例代码: 发送短信和邮件的例子,首先创建接口: public interface Sender { publi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式之工厂方法模式
举报原因:
原因补充:

(最多只允许输入30个字)