设计模式一

引言

设计模式存在的意义?为什么使用设计模式?使用设计模式可以为我带来哪些好处?
在写者看来,设计模式部分原因是可以少写代码;同时建立一种大家都认可规范、制度,可以使代码有利于后续的维护(毕竟挖坑一时爽,填坑火葬场)。

设计模式基础

设计模式说到底,还是基于Java 的三大特性中的多态和继承 + 接口。

封装

封装(Encapsulation),把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。

使用方式

很简单,利用Java关键字private、default、protected、public控制访问权限。一般在自定义类内部使用private防止外部调用。

特点

1、对成员变量更准确的控制。
2、可以隐藏内部程序实现细节。
这个其实够呛。查看代码流程可以通过反编译;调用接口可以通过反射,我对于这点有点怀疑。对于程序员来说,知道游戏机的地点(class文件路径)、知道游戏机开机按钮(调用方法名字+参数),完全可以通过钥匙(反射)为所欲为。
3、外部成员无法修改一封装好的程序代码。

为什么使用封装?

在写者看来,封装其实也是权限控制的一种。
举个例子,一个人(对象)在家(环境)中可以做很多为所欲为的事情,比如洗澡;但是在公园(环境)都不会这么做。是这个人在公园(环境)中不能这么做么?其实是这个人告诉自己,某些事情是(private)的,需要自己在家(环境)才可以做,在公园(环境)不能做。
不过在上面的时候,写者也说过了,通过反射的方式,可以跳过private的限制。但是反射一般在特定环境使用,大多业务情况下,还是使用new关键字创建对象,private关键字依旧会对 对象 调用方法或属性 形成限制。

使用

很简单,使用Java关键字private、default、protected、public控制访问权限。
下面展示 Admin 对象类。
在Admin admin = new Admin();情况下,
1、private修饰的属性,无法通过admin.id获取或者赋予属性值。
2、统一提供 setXXX,getXXX方法 设置 或者 赋予 属性值。
理解:不要让一个方法代表两种可能。对象.属性 既可以赋予属性值,也可以获取属性值,属于不规范的行为;使用 setXXX,getXXX方法 分别赋予 设置属性值、获取属性值 职责,符合单一设计原则规范。

public class Admin {

    private Integer id;
    private String adminName;
    private String password;
 
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getAdminName() {
        return adminName;
    }

    public void setAdminName(String adminName) {
        this.adminName = adminName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
 }

继承

继承,就是子类继承父类的属性和方法,使得子类的实例对象具有父类的属性和方法。

注意事项

1、支持单继承,一个子类只能有一个父类。
2、支持多级继承,Son类有一个Father父类,Father类有一个GrandFather父类。
3、一个父类可以有多个子类,Father父类可以有Son子类和Daugther子类。
4、子类可以继承父类的所有属性,方法。但是受到 关键词(private、default、protected、public)限制的属性和方法 无法访问,形成一种无法被继承的假象。

特点

最明显的就是可以提高代码可复用性。

重写(override)

​是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。外壳不变,核心重写!
注意:重新方法 的 方法名、参数、返回值 必须和要重写的方法保持一致;static方法属于类,不属于实例,无法被重新;final关键字修饰的方法不能被重写;关键词(private、default、protected、public)会限制方法重写。

重载(overload)

在一个类里面,方法名相同,而参数不同就是重载。返回类型、访问修饰符可以相同也可以不同。
每个重载的方法或构造函数都必须有一个独一无二的参数类型列表。
​最常见的地方就是构造器的重载。

this,super关键字

super关键字,一般在子类的成员方法或构造方法中,访问父类未受到 关键词(private、default、protected、public)限制的属性和方法 ;super(…)代指父类的构造方法,子类的构造方法可以引用父类未受到 关键词(private、default、protected、public)限制的构造方法
this关键字,在本类成员方法中访问本类的成员变量或成员方法;在本类的构造方法中访问本类的其他构造方法或成员方法。

多态

简介

父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。
继承关系下,如果父类和子类拥有相同的方法(父类方法被子类重写),不管是直接使用子类进行实例化,还是使用父类的引用类型指向子类进行实例化,其对象调用被重写的方法都是执行子类的方法;如果是父类特有或子类特有,那么分别执行自己的方法。

特点

低耦合(消除类型之间的耦合关系)、灵活、可扩充、可替换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值