工厂模式

安稳与你 提交于 2020-02-25 12:50:30

工厂模式:

  1. 简单工厂模式:
    • 简单介绍:属于创建型模式,是工厂模式的一种 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 简单工厂模式是工厂模式家族中最简单实用的模式 就是定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码) 在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式 但是简单工厂模式中最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码逻辑将会非常复杂
      在这里插入图片描述
    • 代码演示:
      • 首先创建几种商品:

        public interface Car{
            void produce();
        }
        
        public class Baoma implements Car{
            public Baoma () {
                this.produce();
            }
            @Override
            public void produce() {
                // TODO Auto-generated method stub
                System.out.println("生产的是宝马汽车");
            }
        }			
        
        public class Benchi implements Car{
           public Benchi () {
               this.produce();
           }
           @Override
           public void produce() {
               // TODO Auto-generated method stub
               System.out.println("生产的是奔驰汽车");
           }
        }	
        
      • 创建简单工厂类:

        public class SimpleFactory{
            public Car produceCar(String carType) {
                if(carType.equalsIgnoreCase("baoma")){
                    return new Baoma ();
                }
                else if(carType.equalsIgnoreCase("benchi")) {
                    return new Benchi ();
                }else{
                	System.out.println("请输入正确的汽车类型!");
                }
                return null;
            }
        }
        
      • 简单工厂模式的优缺点 优点显而易见就是简单 但是缺点也是明显的就是传入的字符串出错就不能正确的创建对象 解决方式就是使用多个工厂方法模式:

        class SimpleFactory{
            public Baoma produceBaoma(){
                return new Baoma();
            }
        
            public Benchi produceBenchi(){
                return new Benchi();
            }
        }
        
      • 静态工厂模式 :就是将上面的简单工厂模式 中的方法使用static进行修饰 不创建对象直接调用

        class SimpleFactory{
        	 public static Baoma produceBaoma(){
        	      return new Baoma();
        	  }
        	
        	  public static Benchi produceBenchi(){
        	      return new Benchi();
        	  }
        }		
        
      • 上面的方式能解决传入的字符串出错的问题 但是还是有一个问题是明显的 类的创建是依赖工厂类 也就是说想要拓展程序必须对工厂类进行修改 这也就违背了开闭原则 解决的方式就是使用抽象工厂模式: 和上面的思路是一样的 创建多个工厂类 一般需要增加新的功能就新建工厂类即可 而不需要修改以前的代码:(还是使用上面的汽车的例子)

        interface ProduceFactory{
            Car produceCar();
        }
        class ProduceBaoma implements ProduceFactory{
        
            @Override
            public Baoma produceCar() {
                return new Baoma();
            }
        }
        class ProduceBenchi implements ProduceFactory{
        
            @Override
            public Benchi produceCar() {
                return new Benchi();
            }
        }
        
  2. JDK中工厂模式的使用:就是在Calendar类中
    在这里插入图片描述
  3. 总结:工厂模式的意义 将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦。从而提高项目的扩展和维护性
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!