设计模式(工厂方法)

工厂模式:我觉得工厂模式就是第三方模式。当客户端需要实现某些功能时,根据前面讲到的 依赖接口编程原则和不能依赖实现类编程。所以现在就出现一个问题,我需要调用实现类的功能,我又不能直接调用,那我怎么办? 只能通过第三方工厂模式来帮忙调用。那么接口是干什么的?我觉得接口就是用来说明 有那些功能你是可以实现的。当我们具体要用的时候就去找工厂方法。下面是代码实例

接口

public interface BookApi {
    public abstract void t1();
}

实现类1

import cn.hncu.pattern.factory.book.BookApi;
public class BookImpl1 implements BookApi {
    @Override
    public void t1() {
        System.out.println("图书模块的功能:book111111111111111");
    }
}

实现类2

import cn.hncu.pattern.factory.book.BookApi;

public class BookImpl2 implements BookApi {
    @Override
    public void t1() {
        System.out.println("修改后的图书模块功能222222222222");
    }
}

工厂方法


import cn.hncu.pattern.factory.book.impl.BookImpl1;
import cn.hncu.pattern.factory.book.impl.BookImpl2;

//工厂的本质是:选择实现
public class BookApiFactory {
    private BookApiFactory(){
    }

    //工厂方法----命名规范: getInstance, getBookApi, createBookApi
//  public static BookApi getBookApi(){
//      return new BookImpl2();
//  }

    //工厂方法--版本2
    public static BookApi getBookApi( ){
        int type = 2; //"从配置文件读取type值"
        if(type==1){
            return new BookImpl1();
        }else if(type==2){
            return new BookImpl2();
        }else{//加入了原来没有的类
            try {
                Class c = Class.forName("通过配置文件获取类名");//通过dir.list()更活
                return (BookApi) c.newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }

}

客户端调用代码


//当前模块只依赖了book模块的: 工厂+接口
public class Client {
    public static void main(String[] args) {
        //此处不能够依赖实现类,即实现类是隐藏的---因为实现类是封装在模块module内部隐藏,不对外开放
        //解决办法: 通过工厂类得到接口
        BookApi bookApi = BookApiFactory.getBookApi();
        bookApi.t1();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值