美文网首页
设计模式之简单工厂

设计模式之简单工厂

作者: tanoak | 来源:发表于2018-08-01 23:16 被阅读9次
  • 模拟场景
    客户提出要购买100t苹果,然后农场主跑去收购100t苹果给客户

    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香蕉,于是代码变成

    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方法变得很臃肿,来看下简单工厂是如何解决这个问题的

    1. 创建水果接口
    package com.tanoak.create.factory.simple;
    
    /** 
     * @author tanoak@qq.com 
     * @Desc
     */ 
    public interface IFruit {
    
      void name();
    }
    
    
    1. 创建工厂类并实现水果接口

      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;
             }
         }
      }
      
      1. 苹果与香蕉类实现水果接口

        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");
            }
        }
        
        

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

        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();
            }
        }
        

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

相关文章

网友评论

      本文标题:设计模式之简单工厂

      本文链接:https://www.haomeiwen.com/subject/sbudvftx.html