我对封装的工作方式感到困惑

时间:2018-07-21 05:15:20

标签: java oop encapsulation software-design solid-principles

你好今天,我想体验良好OOP设计的概念,并尝试为一家电影商店编写一个应用程序,让客户可以从电影商店购买电影。我有三节课。代表电影商店的类,以及针对客户和电影的类。

现在我的问题是:让客户无需从电影商店购买电影就可以自己创建电影实例吗?我应该相信编写客户类的程序员吗?这个问题与封装有关吗?

1 个答案:

答案 0 :(得分:3)

封装意味着将Data成员声明为私有成员,并通过setter和getter之类的公共方法访问它们。例如,在您的方案中,您想要一个类型为Movie的私有变量。您可以通过public get方法访问Movie,在该方法中您可以在访问Movie对象之前获得某种授权。 setter方法也是如此。这称为封装。例如,请参见基本实现:

class MovieStore{

    private Movie currentPlaying;

    public Movie getCurrentPlayingMovie(){    //Get method
        if(authorizationMethod()){
            return currentPlaying;
        }
        //Authorization failed

        notifyAuthorizationFailed();
        return null;
    }

    public void setCurrentPlayingMovie(Movie m){    //Set method
        //Same like above
    }

}

如果您已将Movie对象声明为公共对象,则任何人都可以直接访问movie对象,并且您没有任何授权。在开发软件时,似乎数据成员不需要任何保护。但是将来可能需要这样做,因此最好始终执行Encapsulation(通过将其声明为私有并向该成员添加setter和getters)来实现,以便您可以在需要时编辑方法。