设计模式(一) -- 简单工厂

本文详细解析了设计模式中的简单工厂模式与接口的概念,包括接口的定义、简单工厂的实现方式及其实现类的选择。通过具体代码示例展示了如何使用简单工厂模式创建对象实例,同时强调了接口在封装隔离、灵活性、扩展性方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式(一)

简单工厂

接口是一种特殊的抽象类,跟一般的抽象类相比,接口里面的所有方法都是抽象方法,接口里面的所有属性都是常量。接口里面只有方法定义而没有任何方法实现。

通常用接口来定义实现类的外观,也就是实现类的行为定义,用来约束实现类的行为。接口就相当于一份契约,根据外部应用需要的功能,约定了实现类应该要实现的功能,但是具体的实现类除了实现接口约定的功能外,还可以根据需要实现其他一些功能。

接口的思想就是“封装隔离”。封装是指“对被隔离体的行为的封装”,或者是“对被隔离体的职责的封装”;而隔离指的是外部调用和内部实现,外部调用只能通过接口进行调用,外部调用是不知道内部具体实现的,也就是说外部调用和内部实现是被接口隔离开的。

由于外部调用和内部实现被接口隔离开了,那么只要接口不变,内部实现的变化就不会影响到外部应用,从而使得系统更灵活,具有更好的扩展性和可维护性,即可插拔性。

优先使用接口;在既要定义子类的行为,又要为子类提供公共的功能时应选择抽象类。

比如接口Api,实现类是Impl,则获得Impl的实例代码为:

Apia pi = new Impl();

这句话破坏了“封装隔离”,同时暴露了接口和实现类给客户端。

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

package simplyfactory;

 

public interfaceApi {

     publicvoidOperation(String a);

}

 

package simplyfactory;

 

public classImplA implementsApi{

 

    @Override

    public void Operation(String a) {

        // TODO Auto-generated method stub

        System.out.println("ImplA is "+a);

    }

 

}

 

package simplyfactory;

 

public classImplB implementsApi{

 

    @Override

    public void Operation(String a) {

        // TODO Auto-generated method stub

        System.out.println("ImplB is "+a);

    }

 

}

 

package simplyfactory;

 

public classClientApi {

       public static Api createApi(int condition){

       Api api = null;

       if(api==null){

           if(condition==1){

                api = new ImplA();

                api.Operation("test");

           }else if(condition==2){

                api = new ImplB();

                api.Operation("test");

           }

       }

       return api;      

}

      

       public static void main(String[] args){

       ClientApi.createApi(1);

       ClientApi.createApi(2);

       }

}

Output:

ImplA is test

ImplB is test

 

简单工厂的位置是位于封装体内的,也就是简单工厂是跟接口和具体的实现在一起的,算是封装体内部的一个类,所以简单工厂知道具体的实现类是没有关系的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值