关闭

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

76人阅读 评论(0) 收藏 举报
分类:

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

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

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


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

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


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

实例接口

/**
 * @类名 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();
	}
}

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:119106次
    • 积分:2124
    • 等级:
    • 排名:第17916名
    • 原创:72篇
    • 转载:133篇
    • 译文:0篇
    • 评论:42条
    联系方式
    邮箱

    zx_fendoubuzhi@126.com
    最新评论