封装&单例模式

429 阅读2分钟

封装

一、为什么需要封装

  1. 创建对象时,赋值比较麻烦。可能记不住属性名和属性的类型。
  2. 创建对象时,赋值可能不合法。
User.java
public class User {
    String name;
    int age;
    String adr;
}
UserManage.java
public class UserManage {
    public static void main(String[] args) {
        User user1 = new User();
        user1.age = -100;
    }
}

二、如何实现封装

实现封装有两步:

第一步,将不能暴露的成员(属性)隐藏起来。比如Customer类中的age,就不能让其在类的外部被直接赋值。所以可以通过将属性定义为私有的,也就是在属性定义前加上private修饰符。

第二步,用公共方法来实现对隐藏属性的访问(setter,getter方法),给函数加上public修饰符,将该方法定义为公共的。

User.java
public class User {
    String name;
    private int age;
    String adr;

    public void setAge(int age) {
        if (age < 0){
            System.out.println("age无法赋值");
        }
        this.age = age;
    }

    public int getAge() {
        return age;
    }
}
UserManage.java
public class UserManage {
    public static void main(String[] args) {
        User user1 = new User();
        user1.setAge(25);
        System.out.println("user1.age = " + user1.getAge());
    }
}
output
user1.age = 25

单例模式

一、单例模式的特点:

  1. 单例类只能有一个实例。
  2. 它必须自行创建这个实例。
  3. 它必须自行向整个系统提供这个实例。 二、实现方法
  4. 第一步,创建一个Customer类
Customer.java
public class Customer{
  //创建一个Customer的对象
  private static Customer instance = new Customer();
  //用private修饰构造函数,这样这个类就不会在类外被实例化
  private Customer(){}
  //获取唯一可用的对象
  public static Customer getInstance(){
      return instance;
  }
   public void showMessage(){
      System.out.println("Hello World!");
   }
}
  1. 第二步,从Customer类获取唯一的对象
CustomerManage.java
public class CustomerManage {
   public static void main(String[] args) {
 
      //不合法的构造函数
      //编译时错误:构造函数 Customer() 是不可见的
      //Customer customer1 = new Customer();
 
      //获取唯一可用的对象
      Customer customer1 = Customer.getInstance();
 
      //显示消息
      customer1.showMessage();
   }
}
  1. 第三步,执行程序,输出结果:
Hello World!