简单工厂模式

java中需要面向接口编程,传统的做法是:

/**
 定义一个接口
*/
public interface Api {
    public void test(String s);
}

/**
 定义一个具体的实现类
*/
public class Impl implements  Api {

    public void test(String s) {
        System.out.print("now  in impl");
    }
}

/**
客户端使用接口的实现类
*/
public class Client {
    public static void main(String[] args) {
    //但是客户端不但知道了接口Api,还知道具体的实现类Impl,
    //没有体现接口的 "封装隔离特性"
        Api api=new Impl();
        api.test("this is a test");
    }
}

其实只是用到了接口的多态部分的功能,而最重要的“封装隔离性”并没有体现出来。

简单工厂能帮助我们真正开始面向接口编程。

简单工厂的定义:提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。

简单工厂的本质是:选择实现。
简单工厂的重点在选择,而实现是已经存在的,要有具体的实现类来实现,而不是在简单工厂里面实现。
简单工厂的目的在于为客户端来选择相应的实现,从而使得客户端与实现之间解耦。

同一个例子:

/**
 定义一个接口
*/
public interface Api {
    public void test(String s);
}

/**
 定义一个具体的实现类  Impl 
*/
public class Impl implements  Api {

    public void test(String s) {
        System.out.print("now  in impl");
    }
}


/**
 再定义一个具体的实现类  Impl2 
*/
public class Impl2 implements Api {
    public void test(String s) {
        System.out.print("now  in impl2");
    }
}


/**
 定义一个简单工厂
*/
public class Factory {

   /**
    * 根据参数选择不同的实现对象(参数可以来源于客户端,也可以来源于配置文件,利用反射机制或Ioc/依赖注入)
    *
    * 返回创建好的Api对象
    * */
   public static Api createApi(int condition) {

       Api api=null;
       if(condition==1){
           api=new Impl();
       }else if(condition==2){
           api=new Impl2();
       }
       return api;
   }
/**
  一个简单工厂可以包含很多不同的方法来创建不同的接口、抽象类或者是类实例。一个简单工厂理论上可以构造任何东西,也成为万能工厂
*/
 public static People createStudent(int condition) {
       People people=null;
       if(condition==1){
           people=new Stu1();
       }else if(condition==2){
           people=new Stu2();
       }
       return people;
   }
/**
虽然从理论上讲,简单工厂什么都能创建,但是一般不要太大,建议控制在一个独立的组件级别或者模块级别。
*/
}

/**
客户端使用接口的实现类
*/
public class Client {
    public static void main(String[] args) {
    /**
    1、让简单工厂来负责创建接口对象,而不是由客户端自己去创建接口对象
    2、通常没有必要创建简单工厂类的类实例,可以把简单工厂实现成一个工具类,直接使用静态方法就可以,所以也被成为静态工厂

   */
        Api api=Factory.createApi(1);
        api.test("this is a test");
    }
}

简单工厂与相关模式的区别:
1、简单工厂 和 抽象工厂模式
1.1、简单工厂是用来选择实现的,可以选择任意接口的实现。一个简单工厂可以有多个用于选择并创建对象的方法,多个方法创建的对象可以有关系也可以没有关系
1.2、抽象工厂模式是用来选择 产品簇 的,它也有多个用于选择并创建对象的方法,但是这些方法所创建的对象之间通常是有关系的,这些被创建的对象通常是构成一个产品簇所需要的部件对象。

简单工厂和抽象工厂是类似的,如果抽象工厂退化成只有一个实现,且不分层次,那么就相当于是简单工厂了。

2、简单工厂 和 工厂方法模式
2.1、工厂方法的本质也是用来选择实现的,区别在于把选择具体实现的功能延迟到子类去实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值