设计模式基础3--存取方法+Private类成员和方法
2010-05-11 16:09
197 查看
本来不想写这个的,太基础了,不过为了整个学习笔记的完备性还是简单写几笔给自己留着看。
1.存取方法也就是所谓的getter and setter,对于类中的private成员提供对外的接口,这样的设计使得最后的在程序修改时只需要修改这些setter and getter,而不必工程中修改所有与这个成员相关的东西,这些setter和getter不单单是为了给类外的对象使用的,内部使用时也尽可能使用,以提高程序的可修改性。而private类成员和方法是实现面向对象封装特性的重要方法,相关的控制符权限级别在我前些时的一篇文字中()中有一个表和相关描述可供参考,封装的好处在于:
2. 实例:一个比较有趣的例子是husband和wife的封装例子,仔细看就会发现,Man类没有提供getWife的方法,这是以为男人不想让自己的妻子被外界访问。封装可以吧一个对象的属性私有,而提供一些可以被外界访问的属性的方法,比如说,name属性,Man和Woman类都有相应的get和 set方法,外界都可以通过这些方法访问和修改, 同时对一些改对象不想让外界访问的属性,就不提供其方法,比如说Man的wife属性,就没有get方法, 外界是不能带到Man类的wife属性的。
3.优点:
1)可以改变内部实现,除了该类的方法之外,不会影响其他代码。
例如,如果将对于名字的存取方法的而实现改为firstName + ' ' + lastName,对于这点改变,程序的其他部分完全不可见。
2)存取方法可以执行错误检查,然而直接对域进行赋值将不会进行这些处理。例如,setAge方法可以检查年龄是否小于0。
4.注意:不要编写返回引用可变对象的 getter方法。由于返回引用可变对象的方法会返回一个对private成员的引用,对这个成员的修改可以绕过setter方法,这样就会破坏封装性,因为封装性要求不能在别的类中修改本类的私有域,但是若返回一个可变对象的引用,则别的类调用本类的getter就可以修改,这就破环了封装。解决方法是,如果需要返回一个可变对象的引用,应该首先对它进行克隆(clone)。
1.存取方法也就是所谓的getter and setter,对于类中的private成员提供对外的接口,这样的设计使得最后的在程序修改时只需要修改这些setter and getter,而不必工程中修改所有与这个成员相关的东西,这些setter和getter不单单是为了给类外的对象使用的,内部使用时也尽可能使用,以提高程序的可修改性。而private类成员和方法是实现面向对象封装特性的重要方法,相关的控制符权限级别在我前些时的一篇文字中()中有一个表和相关描述可供参考,封装的好处在于:
2. 实例:一个比较有趣的例子是husband和wife的封装例子,仔细看就会发现,Man类没有提供getWife的方法,这是以为男人不想让自己的妻子被外界访问。封装可以吧一个对象的属性私有,而提供一些可以被外界访问的属性的方法,比如说,name属性,Man和Woman类都有相应的get和 set方法,外界都可以通过这些方法访问和修改, 同时对一些改对象不想让外界访问的属性,就不提供其方法,比如说Man的wife属性,就没有get方法, 外界是不能带到Man类的wife属性的。
public class Man { // 对属性的封装,一个人的姓名,年龄,妻子都是这个对象(人)的私有属性 private String name; private int age; private Woman wife; // 对改人对外界提供方法的封装,可以设定妻子,姓名,年龄也可以获得男人的姓名和年龄 public void setWife(Woman wife) { this.wife = wife; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } public class Woman { // 属性封装 private String name; private int age; private Man husband; // 方法封装 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Man getHusband() { return husband; } public void setHusband(Man husband) { this.husband = husband; } }
3.优点:
1)可以改变内部实现,除了该类的方法之外,不会影响其他代码。
例如,如果将对于名字的存取方法的而实现改为firstName + ' ' + lastName,对于这点改变,程序的其他部分完全不可见。
2)存取方法可以执行错误检查,然而直接对域进行赋值将不会进行这些处理。例如,setAge方法可以检查年龄是否小于0。
4.注意:不要编写返回引用可变对象的 getter方法。由于返回引用可变对象的方法会返回一个对private成员的引用,对这个成员的修改可以绕过setter方法,这样就会破坏封装性,因为封装性要求不能在别的类中修改本类的私有域,但是若返回一个可变对象的引用,则别的类调用本类的getter就可以修改,这就破环了封装。解决方法是,如果需要返回一个可变对象的引用,应该首先对它进行克隆(clone)。
相关文章推荐
- 设计模式学习笔记4——设计模式基础3--存取方法+Private类成员和方法
- 【面向对象设计基础】存取方法+Private类成员和方法
- SSM框架day01——032——缺省适配器设计模式、033——模板方法设计模式基础知识
- java中 构造方法和单例设计模式(基础)
- Java基础——继承+子父类相关特点+Final关键字+抽象类+模板方法设计模式+接口
- java基础之equal()方法、static关键字、单例设计模式
- JAVA基础6.60——模板方法设计模式
- 【设计模式基础】创建型模式 - 4 - 工厂方法(Factory Method)
- 设计模式基础——抽象类、抽象方法、接口与虚方法
- 黑马程序员_Java基础加强_Java类加载器,委托机制,模板方法设计模式
- 可复用面向对象软件基础——设计模式(二)之工厂方法模式
- 黑马程序员——JAVA基础之抽象和接口 , 模版方法设计模式
- 【幻化万千戏红尘】qianfengDay10-java基础学习:成员内部类、静态内部类、局部和匿名内部类,设计模式之简单工厂模式
- 黑马程序员:Java基础总结----模版方法设计模式
- 黑马程序员_Java基础_面向对象(Static的使用、对象初始化和调用成员过程、单例设计模式)
- 黑马程序员——Java基础---面向对象(对象的初始化、对象调用成员、单例设计模式)(4)
- 【设计模式基础】行为模式 - 6 - 模板方法(Template Method)
- 黑马程序员--基础加强--第三篇--单例设计模式,装饰者模式认识,专家模式,享元模式,模版方法设计模式
- 策略设计模式:父类持有接口成员变量,动态设定接口成员实现类,动态改变方法
- java基础七(成员变量 局部变量 匿名对象 封装 设计原则 private this 构造方法 static)