仅通过按工厂创建实例的接口在包外部进行公共访问

时间:2016-04-11 14:08:54

标签: java

这是一个好的设计还是错的? Dao类不在包外访问。它仅在包访问修饰符中创建。所有只能通过界面访问。

public interface IDao {

    void perform();

}


//package access
class Dao implements IDao{

    private Dao(){}

    @Override
    void perform(){...}

    Dao getInstance(){
        ...
        return new Dao();
    }

}

//in the same package as Dao
public class DaoFactory{

    private DaoFactory(){}

    public static IDao createDao(){
        return Dao.getInstance();
    }
}

创建和调用:

IDao dao = DaoFactory.createDao();
dao.perform(); 

1 个答案:

答案 0 :(得分:0)

我希望我能正确理解你。

简而言之,使用接口而不是类(实现)始终是好的,因为客户端代码不依赖于可以轻松更改的实现。无论客户端代码是位于同一个包还是其他任何地方。这是松耦合,它是SOLID中的D.