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



实例:买宝马车。不用设计模式:一个客户今天买宝马1系列车,明天买宝马系列2车,后天系列3.。。。

工厂模式主要是:为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来

一、简单工厂模式




/**
 * 抽象产品:宝马车
 * 
 * @author XiaoGang
 * 
 */
public abstract class BWM {

	public BWM() {

	}

}
package parttern1.simplefactory;

/**
 * 具体产品:宝马车系列1
 * 
 * @author XiaoGang
 * 
 */
public class BWM_1 extends BWM {

	public BWM_1() {

		System.out.println("宝马系列1");

	}

}

package parttern1.simplefactory;

/**
 * 具体产品:宝马车系列2
 * 
 * @author XiaoGang
 * 
 */
public class BWM_2 extends BWM {

	public BWM_2() {

		System.out.println("宝马系列2");

	}

}

package parttern1.simplefactory;

/**
 * 工厂
 * 
 * @author XiaoGang
 * 
 */
public class Factory {

	/**
	 * 
	 * @param type
	 *            所生产的车的系列
	 * @return 所要的系列中的一辆车实例
	 */
	public BWM creatBWM(int type) {
		switch (type) {
		case 1:
			return new BWM_1();
		case 2:
			return new BWM_2();
		default:
			break;
		}
		return null;
	}
}

package parttern1.simplefactory;

public class Customer {

	public static void main(String[] args) {

		Factory factory = new Factory();

		BWM bwm1 = factory.creatBWM(1);

		BWM bwm2 = factory.creatBWM(2);
	}
}

简单工厂模式又称静态工厂方法模式。命名上就可以看出这个模式一定很简单。它存在的目的很简单: 定义一个用于创建对象的接口 。 
每增加一种新型车,都要在工厂类中增加相应的创建业务逻辑(createBMW(int type)方法需要新增case),这显然是违背开闭原则的。可想而知对于新产品的加入,工厂类是很被动的。

 于是工厂方法模式作为救世主出现了。 工厂类定义成了接口,而每新增的车种类型,就增加该车种类型对应工厂类的实现,这样工厂的设计就可以扩展了,而不必去修改原来的代码。

二、工厂方法模式

修改工厂类:定义一个工厂接口,和生产各种系列车的工厂类(实现工厂接口)

package parttern1.simplefactory;

/**
 * 工厂接口
 * 
 * @author XiaoGang
 * 
 */
public interface IFactory {

	/**
	 * @return 宝马车的抽象类
	 */
	BWM creatBWM();

}

package parttern1.simplefactory;

/**
 * 工厂:专门生产宝马系列1
 * 
 * @author XiaoGang
 * 
 */
public class FactoryBWM_1 implements IFactory {

	@Override
	public BWM creatBWM() {

		return new BWM_1();

	}

}

package parttern1.simplefactory;

/**
 * 工厂:专门生产宝马系列2
 * 
 * @author XiaoGang
 * 
 */
public class FactoryBWM_2 implements IFactory {

	@Override
	public BWM creatBWM() {

		return new BWM_2();

	}

}

package parttern1.simplefactory;

public class Customer {

	public static void main(String[] args) {

		// Factory factory = new Factory();
		//
		// BWM bwm1 = factory.creatBWM(1);
		//
		// BWM bwm2 = factory.creatBWM(2);

		FactoryBWM_1 factory1 = new FactoryBWM_1();
		BWM bwm1 = factory1.creatBWM();

		FactoryBWM_2 factory2 = new FactoryBWM_2();
		BWM bwm2 = factory2.creatBWM();

	}
}

如果需要新系列车型,直接新定义一个新系列汽车工厂,就可以得到新系列车产品,而不用修改老代码!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值