zoukankan      html  css  js  c++  java
  • 简单工厂模式和工厂方法模式

    1、简单工厂模式

    简单工厂模式又称静态工厂模式

    简单工厂模式的实质:一个工厂类根据传入的参数,动态决定应该创建哪一类产品类(这些产品类均继承自一个父类或接口)实例。

    比如用户买车,要先去4S店就看车,4S店又要从车厂进货。

    1. 传统方式

      • 接口Car
      public interface Car {
          void name();
      }
      
      • Car的实现类->Maserati类
      public class Maserati implements Car{
          @Override
          public void name() {
              System.out.println("我是玛莎拉蒂");
          }
      }
      
      • Car的实现类->WuLing类
      public class WuLing implements Car{
          @Override
          public void name() {
              System.out.println("我是五菱宏光");
          }
      }
      
      • CarFactory
      public class CarFactory {
          //方法一
      //    public static Car getCar(String name){
      //        if("WuLing".equals(name)){
      //            return new WuLing();
      //        }else if("MSLD".equals(name)){
      //            return new MSLD();
      //        }else{
      //            return null;
      //        }
      //    }
      
          //方法二
          public static Car getWuLing(){
              return new WuLing();
          }
          public static Car getMSLD(){
              return new Maserati();
          }
      }
      
      • 用户Customer
      public class Customer {
          public static void main(String[] args) {
              //法一对应的代码
      //        Car car1 = CarFactory.getCar("");
      //        Car car2 = CarFactory.getCar("WuLing");
              
              //法二对应的代码
              Car car1 = CarFactory.getWuLing();
              final Car car2 = CarFactory.getMSLD();
              try {
                  car1.name();
                  car2.name();
              } catch (NullPointerException e){
                  System.out.println("不存在该车");
              }
          }
      }
      /**
      运行结果就是 :
      	我是五菱宏光
      	我是玛莎拉蒂
      */
      

    2、工厂方法(Factory Method)

    public interface Car {
        void name();
    }
    
    public interface CarFactory {
        Car getCar();
    }
    
    public class Maserati implements Car{
        @Override
        public void name() {
            System.out.println("我是玛莎拉蒂");
        }
    }
    
    
    public class MaseratiFactory implements CarFactory{
        @Override
        public Car getCar() {
            return new Maserati();
        }
    }
    
    
    public class Tesla implements Car{
        @Override
        public void name() {
            System.out.println("我是特斯拉");
        }
    }
    
    public class TeslaFactory implements CarFactory{
        @Override
        public Car getCar() {
            return new Tesla();
        }
    }
    
    public class WuLing implements Car{
        @Override
        public void name() {
            System.out.println("我是五菱宏光");
        }
    }
    
    public class WuLingFactory implements CarFactory{
        @Override
        public Car getCar() {
            return new WuLing();
        }
    }
    
    
    •   public class Customer {
            public static void main(String[] args) {
                Car car1 = new WuLingFactory().getCar();
                Car car2 = new MaseratiFactory().getCar();
                Car car3 = new TeslaFactory().getCar();
                car1.name();;
                car2.name();
                car3.name();
            }
        }
        /**
        运行结果:
        	我是五菱宏光
            我是玛莎拉蒂
            我是特斯拉
        */
      
  • 相关阅读:
    年纪大了,要学会控制自己的欲望
    java为什么要用类型擦除实现泛型?--c++,java,c# 的泛型是如何实现的
    面向对象:类的成员---只是特定(类的)命名空间的全局变量(函数)而已
    人的意志与自然法则—人的意志与人造事物
    所有的思考都有两个目的:建模降熵
    控制论、系统论与熵
    秩序(也常简称为序)是系统的本质特征之一
    控制论:基于全局信息和整体目标、整体规则的系统结构和状态维护
    人类社会的全部认识成果可以概括为三大领域的科学,即自然科学、社会科学和思维科学
    “逻辑”的古希腊词源
  • 原文地址:https://www.cnblogs.com/wfszmg/p/13550775.html
Copyright © 2011-2022 走看看