For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
Java编程开发是目前大多数软件开发程序员都在学习和使用的一种编程开发语言,而本文我们就通过案例分析来简单了解一下,Java编程对象的创建与应用。
对象的创建者耦合的是对象的具体类型,而对象的使用者耦合的是对象的接口。也就是说,创建者关心的是这个对象是什么,而使用者关心的是它能干什么。这两者应该视为独立的考量,它们往往会因为不同的原因而改变。
当对象的类型涉及多态、对象创建复杂(依赖较多)可以考虑将对象的创建过程分离出来,使得使用者不用关注对象的创建细节。设计模式中创建型模式的出发点就是如此,实际项目中可以使用工厂模式、构建器、依赖注入的方式。
可访问性小化
区分一个组件设计得好不好,一个很重要的因素在于,它对于外部组件而言,是否隐藏了其内部数据和实现细节。Java提供了访问控制机制来决定类、接口和成员的可访问性。实体的可访问性由该实体声明所在的位置,以及该实体声明中所出现的访问修饰符(private、protected、public)共同决定的。
对于顶层的(非嵌套的)类和接口,只有两种的访问级别:包级私有的(没有public修饰)和公有的(public修饰)。
对于成员(实例/域、方法、嵌套类和嵌套接口)由四种的访问级别,可访问性如下递增:
私有的(private修饰)--只有在声明该成员的顶层类内部才可以访问这个成员;
包级私有的(默认)--声明该成员的包内部的任何类都可以访问这个成员;
受保护的(protected修饰)--声明该成员的类的子类可以访问这个成员,并且声明该成员的包内部的任何类也可以访问这个成员;
公有的(public修饰)--在任何地方都可以访问该成员;
正确地使用这些修饰符对于实现信息隐藏是非常关键的,原则就是:尽可能地使每个类和成员不被外界访问(私有或包级私有)。这样好处就是在以后的发行版本中,可以对它进行修改、替换或者删除,而无须担心会影响现有的客户端程序。
如果类或接口能够做成包级私有的,它就应该被做成包级私有的;
如果一个包级私有的顶层类或接口只是在某一个类的内部被用到,就应该考虑使它成为那个类的私有嵌套类;
公有类不应直接暴露实例域,应该提供相应的方法以保留将来改变该类的内部表示法的灵活性;
当确定了类的公有API之后,应该把其他的成员都变成私有的;
如果同一个包下的类之间存在比较多的访问时,就要考虑重新设计以减少这种耦合;
可变性小化
不可变类是指其实例不能被修改的类。每个实例中包含的所有信息都必须在创建该实例时提供,并在对象的整个生命周期内固定不变。不可变类好处就是简单易用、线程安全、可自由共享而不容易出错。Java平台类库中包含许多不可变的类,比如String、基本类型包装类、BigDecimal等。
为了使类成为不可变,要遵循下面五条规则:
声明所有的域都是私有的
声明所有的域都是final的
如果一个指向新创建实例的引用在缺乏同步机制的情况下,从一个线程被传递到另一个线程,就必须确保正确的行为
不提供任何会修改对象状态的方法
保证类不会被扩展(防止子类化,类声明为final)
防止粗心或者恶意的子类假装对象的状态已经改变,从而破坏该类的不可变行为
确保对任何可变组件的互斥访问
如果类具有指向可变对象的域,则必须确保该类的客户端无法获得指向这些对象的引用。并且,永远不要用客户端提供的对象引用来初始化这样的域,也不要从任何访问方法中返回该对象引用。在构造器、访问方法和readObject方法中使用保护性拷贝技术
可变性小化的一些建议:
除非有很好的理由要让类成为可变的类,否则它就应该是不可变的;
如果类不能被做成不可变的,仍然应该尽可能地限制它的可变性;
除非有令人信服的理由要使域变成非final的,否则要使每个域都是privatefinal的;
构造器应该创建完全初始化的对象,并建立起所有的约束关系;
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。