业务场景
工厂模式一般配合策略模式一起使用。用来去优化大量的if...else...或switch...case...条件语句。
我们就取我的另一篇文章《策略模式-业务场景和实战优化》那个例子吧。根据不同的会员类型,返回不同的折扣后的金额。
Strategy getStrategy(MemberTypeEnum memberType){
Strategy strategy ;
if(memberType=MemberTypeEnum.Silver){
fileStrategy = new SilverStrategy();
}else if(memberType=MemberTypeEnum.Gold){
fileStrategy = new GoldStrategy();
}else{
fileStrategy = new OrdinaryStrategy();
}
return fileStrategy;
}
其实这就是工厂模式,定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
策略模式的例子,没有使用上一段代码,而是借助spring的特性,搞了一个工厂模式,可以返回看我另一篇文章《策略模式-业务场景和实战优化》例子里面的代码吧。
使用工厂模式
定义工厂模式也是比较简单的:
- 一个工厂接口,提供一个创建不同对象的方法。
- 其子类实现工厂接口,构造不同对象
- 使用工厂模式
一个工厂接口
interface IFactory{
void compute();
}
不同子类实现工厂接口
class OrdinaryStrategy implements IFactory{
double compute(double money) {
System.out.println("普通会员 不打折");
return money;
}
}
class SilverStrategy implements IFactory{
double compute(double money) {
System.out.println("白银会员 优惠50元");
return money - 50;
}
}
class GoldStrategy implements IFactory{
double compute(double money) {
System.out.println("黄金会员 8折");
return money * 0.8;
}
}
使用工厂模式
//构造不同的工厂对象
IFactory factory;
if(memberType=MemberTypeEnum.Ordinary){
factory = new OrdinaryStrategy();
}else if(memberType=MemberTypeEnum.Silver){
factory = new SilverStrategy();
}else{
factory = new GoldStrategy();
}
factory.compute(money);
一般情况下,对于工厂模式,你不会看到以上的代码。工厂模式会跟配合其他设计模式如策略模式一起出现的。