前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之简单工厂

设计模式之简单工厂

作者头像
tanoak
发布2018-08-02 17:08:12
2430
发布2018-08-02 17:08:12
举报
文章被收录于专栏:java闲聊java闲聊
  • 模拟场景 客户提出要购买100t苹果,
代码语言:javascript
复制
package com.tanoak.create.factory.simple.demo;

/**
 * @author tanoak@qq.com
 * @date 2018/8/1 22:31
 * @Desc
 */
public class Apple {
  private String name ;

  public String getName() {
      return name;
  }

  public void setName(String name) {
      this.name = name;
  }

  public Apple(String name) {
      this.name = name;
  }

  @Override
  public String toString() {
      return "Apple{" +
              "name='" + name + '\'' +
              '}';
  }

  public static void main(String[] args) {
      Apple a = new Apple("红色的苹果") ;
      System.out.println(a.toString());
  }
}
  • 然后农场主跑去收购100t苹果给客户
代码语言:javascript
复制
package com.tanoak.create.factory.simple.demo;

/**
 * @author tanoak@qq.com
 * @Desc
 */
public class Banana  {
  private String name ;

  public String getName() {
      return name;
  }

  public void setName(String name) {
      this.name = name;
  }

  public Banana(String name) {
      this.name = name;
  }

  @Override
  public String toString() {
      return "Banana{" +
              "name='" + name + '\'' +
              '}';
  }
  public static void main(String[] args) {
      Apple a = new Apple("红色的苹果") ;
      Banana b = new Banana("香蕉") ;
      System.out.println(a.toString());
  }

}
  • 这样会带来的问题很明显,main方法变得很臃肿,来看下简单工厂是如何解决这个问题的
代码语言:txt
复制
1. 创建水果接口
代码语言:javascript
复制
 package com.tanoak.create.factory.simple;

/** 
 * @author tanoak@qq.com 
 * @Desc
 */ 
public interface IFruit {

  void name();
}
代码语言:txt
复制
1.  创建工厂类并实现水果接口
代码语言:javascript
复制
package com.tanoak.create.factory.simple;

/**
 * @author tanoak@qq.com
 * @Desc
 */
public class FruitFactory {

   private FruitFactory(){}

   public static IFruit createProduct(String name){//生产水果
       String apple = "apple" ;
       String banana = "banana" ;
       if (name == null) {
           return null;
       }
       if (name.equals(banana)) {
           return new Banana();
       }else if (name.equals(apple)) {
           return new Apple();
       }else {
           return null;
       }
   }
}

作者:tanoak
链接:https://www.jianshu.com/p/9c21f9b9789f
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
代码语言:txt
复制
    1.  苹果与香蕉类实现水果接口

代码语言:javascript
复制
package com.tanoak.create.factory.simple;

/** 
 * @author tanoak@qq.com
 * @date 2018/7/19 16:43
 * @Desc
 */ 
public class Apple implements IFruit{
    private String name ;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Apple(String name) {
        this.name = name;
    }

    public Apple() {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Apple{" +
                "name='" + name + '\'' +
                '}';
    }

    @Override
    public void name() {
        this.setName(name);
        System.out.println("The is Apple");
    }
}
//

package com.tanoak.create.factory.simple;

/** 
 * @author tanoak@qq.com
 * @date 2018/7/19 16:43
 * @Desc
 */ public class Banana implements IFruit{

    private String name ;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Banana(String name) {
        this.name = name;
    }
    public Banana() {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Banana{" +
                "name='" + name + '\'' +
                '}';
    }

    @Override
    public void name() {
        this.setName(name);
        System.out.println("This is Banana");
    }
}

作者:tanoak
链接:https://www.jianshu.com/p/9c21f9b9789f
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
 

编写好之后,来看Main方法,当需要苹果时只需要修改一个参数就行了,并不需要在main方法中new,有小伙伴可能要问了,这代码没变少反而多了,关于这个问题请看设计模式序言

代码语言:javascript
复制
package com.tanoak.create.factory.simple;
/**
 * @author tanoak@qq.com
 * @Desc  简单工厂模式
 */
public class Main {

    public static void main(String[] args) {
        IFruit apple = FruitFactory.createProduct("apple");//banana
        apple.name();
    }
}

作者:tanoak
链接:https://www.jianshu.com/p/9c21f9b9789f
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

如理解有误,请指正,谢谢

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.08.01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档