栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中封装与单例模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中封装与单例模式

对于普通对象来说,调用属性名进行赋值时,需要去记住对象的属性名以及类型,非常麻烦,并且对于属性值没有验证机制,不能保证数据的安全性和隐秘性。而封装就能解决这些问题。

封装:是将类里的某些信息通过访问权限修饰符,限制其使用范围,从而达到隐藏的目的,要访问或者修改的话只能通过类暴露出来的setter/getter执行。

封装的好处:隐藏实例化的细节,并且只能通过规定的方法进行更改或者查看,而不是任何类属性都可以查看和修改。

封装的实现步骤:

        1.对类中属性使用private修饰

        2.创建setter/getter方法

        3.在setter/getter中进行逻辑验证

public class User{
    private String username;
    private String userpwd;
    private int age;


    
    public void setAge(int age){
        // 数据验证
        if(age >= 0){
            this.age = age;
        } else{
            System.err.println ("输入年龄值不合法!!");
        }

    }

    
    public int getAge(){
        return age;
    }

    public void setUsername(String username){
        this.username = username;
    }


}

上一篇文章说到了类与对象的概念以及如何创建一个类和实例化一个对象,之前实例化的对象时,都是隐式构造,也就是说没有在创建的时候传入我们需要的添加的参数,有时候我们需要直接快捷的实例化一个满足条件的对象,这时我们可以使用构造方法来完成。

构造方法的格式:

        类名为方法名,没有返回值结构

public class User{
    private String username;
    private String userpwd;
    private int age;

    // 构造方法
    // 如果显式的写了构造方法 那么隐式就会被覆盖,不管显式的是否带参数
    // 只会被调用一次--- 创建对象时调用
    public User(String username, String userpwd, int age){
        this.setUsername (username);
        this.userpwd = userpwd;
        this.setAge (age);
    }
}

此时实例化的对象就可以传入需要的参数

public class UserManage{
  public static void main(String[] args){
    User user = new User ("admin","admin123",20);
    //隐式构造时的写法
    //user.username="admin";
    //user.userpwd="admin123";
    //user.age=-20;
  }
}

接下来在介绍一个概念,叫做重载(Typescript中也有此概念,笔者会在之后的文章中专门介绍)

        同一个类中,有同名的方法。但有关键前提,方法中的参数不一致

        1.参数有无

public class User{
    String username;
    String userpwd;
    int age;

    public User(String username, String userpwd, int age){
        this.setUsername = username;;
        this.userpwd = userpwd;
        this.setAge (age);
    }

    // 方法重载
    // 重载不同的构造方法 实现不同的对象创建
    public User(){
        this.setUsername = "";;
    }
}

        2.参数类型不同

public class User{
    String username;
    String userpwd;
    int age;

    public User(String username, String userpwd, int age){
        this.setUsername = username;;
        this.userpwd = userpwd;
        this.setAge = age;
    }

    // 方法重载
    // 重载不同的构造方法 实现不同的对象创建
    public User(String username, String userpwd, double age){
        this.setUsername = username;
        this.userpwd = userpwd;
        this.setAge = age;
    }
}

        3.参数的数量不同

public class User{
    String username;
    String userpwd;
    int age;

    public User(String username, String userpwd, int age){
        this.setUsername = username;;
        this.userpwd = userpwd;
        this.setAge = age;
    }

    // 方法重载
    // 重载不同的构造方法 实现不同的对象创建
    public User(String username, int age){
        this.setUsername = username;;
        this.setAge = age;
    }
}

        4.参数的顺序不同

public class User{
    String username;
    String userpwd;
    int age;

    public User(String username, String userpwd, int age){
        this.setUsername = username;;
        this.userpwd = userpwd;
        this.setAge = age;
    }

    // 方法重载
    // 重载不同的构造方法 实现不同的对象创建
    public User(int userpwd, String username, String age){
        this.userpwd = userpwd;
        this.setUsername = username;;
        this.setAge = age;
    }
}

接下来介绍一个常见的设计模式——单例模式(之后会拿Javascript和Typescript专门写一个介绍)

单例模式的概念以及实现方法:

一个类在一个系统只有一个对象

一个王国只有一个国王,一个班级只有一个班主任,比如常见的管理系统中设置的超级管理员实际上就是单例模式的一个应用

不能随意可以创建新的对象,选择使用private 修饰构造方法,使其在类之外不能创建对象

那就需要在本类中,自己来创建一个唯一的对象,提供给外部

static 静态的 唯一性

由static 修饰的属性与方法,不属于对象,只属于类本身且只有一份,可以由类名直接调用

public class User{
    private String username;
    private String userpwd;
    private int age;

    
    private User(String username, String userpwd, int age){
        this.username = username;
        this.userpwd = userpwd;
        this.age = age;
    }
    // 创建单例
    private static User king = new User ("king","king123",80);

    // 提供一个静态的方法来获取king对象
    public static User getKing(){
        return  king;
    }


    public String getUsername(){
        return username;
    }

    public void setUsername(String username){
        this.username = username;
    }

    public String getUserpwd(){
        return userpwd;
    }

    public void setUserpwd(String userpwd){
        this.userpwd = userpwd;
    }

    public int getAge(){
        return age;
    }

    public void setAge(int age){
        this.age = age;
    }
}
class UserManage{

    public static void main(String[] args){
//        User user = new User ("admin","admin123",20);
    User king = User.getKing ();// 直接调用静态方法 返回单例

    }

}

欢迎各位批评指正

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/713341.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号