23种设计模式——工厂模式

11 篇文章 0 订阅

工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

  • 优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。

  • 缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

  • 使用场景: 1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。

简单的工厂模式

  /**
  * 工厂类
  **/
  public interface FactoryParent(){
    	
       // 工厂制造机器
       public viod machine();
  }
 
   /**
   * 工厂里面制造  一个工厂里面可以实现多个制造 每一个制造类都需要实现工厂 比如 
   **/
   public class MakeProduct implements FactoryParent {
     	
        // 工厂制造机器
        public viod machine(){
        	System.out.println("一号制造");
        }
 	
    }
  
   /**
   * 工厂调用
   **/
 public class CourseFactory {

    /**
     *
     * @param className 调用工厂
     * @return
     */
    public FactoryParent course(Class className){
            try{
                if (!(null == className || ("").equals(className))){
                    return (FactoryParent) className.newInstance ();
                }
            }catch (Exception e){
                e.fillInStackTrace();
            }
            return null;
    }
}
 


public class SimpleTest {
   
   /**
   * 通过工厂调用直接制造
   **/
   @Test
   public void SimpleTest(){
       CourseFactory cf = new CourseFactory();
        FactoryParent course= cf.course(MakeProduct.class);
       course.record();
   }

}

简单工厂只能解决创建逻辑非常复杂、对于用户而言更加简化、简化了调用逻辑。一般适用于产品相当稳定,业务逻辑不能复杂。工厂模式一般都用于jar ,所以调用端一般只需要传入一个正确的参数,就可以获取所需的对象。

工厂方法模式

工厂方法模式是指定义一个创建对象接口,但是实例化这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。 解决产品不断的丰富、以及业务越来越复杂。

  /**
  * 工厂类
  **/
  public interface FactoryParent(){
    	
       // 工厂制造机器
       public viod machine();
  }
 
   /**
   * 工厂里面制造  一个工厂里面可以实现多个制造 每一个制造类都需要实现工厂 比如 
   **/
   public class makeProduct implements FactoryParent {
     	
        // 工厂制造机器
        public viod machine(){
        	System.out.println("一号制造");
        }
 	
    }
  
   /**
   * 工厂调用
   **/
 public class CourseFactory {

    /**
     *
     * @param className 调用工厂
     * @return
     */
    public FactoryParent course(Class className){
            try{
                if (!(null == className || ("").equals(className))){
                    return (FactoryParent) className.newInstance ();
                }
            }catch (Exception e){
                e.fillInStackTrace();
            }
            return null;
    }
}
 

/**
* 工厂的父类
**/
public interface FactoryParentFacory {

    ICourse create();
}

  
/**
* 工厂的实现 根据不同的需求创建不一样的工厂 
**/
public class JavaCourseFactory implements  FactoryParentFacory {
    public ICourse create() {
        return new JavaCourse();
    }



public class SimpleTest {
   
   /**
   * 通过工厂调用直接制造
   **/
   @Test
   public void FactoryMethodTest(){
       CourseFactory cf = new CourseFactory();
        FactoryParent course= cf.course(JavaCourse.class);
       course.record();
   }

}

在工厂方法模式 带入了开闭原则

开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类等,后面的具体设计中我们会提到这点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值