工厂模式-业务场景和实战优化

281 阅读1分钟

业务场景

工厂模式一般配合策略模式一起使用。用来去优化大量的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);

一般情况下,对于工厂模式,你不会看到以上的代码。工厂模式会跟配合其他设计模式如策略模式一起出现的。