Day01

https://www.bilibili.com/video/av92884077?p=3

Creational(创造性模式)——创建对象

Structural(结构性模式)——对象之间的关系

Behavioual(行为性模式是)—— 对象的行为或者交互方面内容

面向对象四个原则:封装、抽象、继承、多态

耦合:表达了一个类对另一个类的依赖度是多少

Java及UML简述

一、类

public class Main {
    public static void main(String[] args) {
        //如此时的User与Main就是耦合状态,如果有成千上万个类,耦合越高,越难修改和扩展
        //——程序应当用低耦合形式——使用接口
        User user = new User("Me ");
//        user.name = "Me";
//        System.out.println(user.name);
        user.sayHello();
    }
}

public class User {
    //属性
    public String name;
    public User(String name){
        this.name = name;
    }
    //方法
    public void sayHello(){
        System.out.println("My name is" + name);
    }
}

二、接口:要求类必须提供某些能力的约定

image.png
Main
/**
 * 税款计数器——如可以开发一个2019的计算机,或者2020的计算机,但是这些计算机都有共同的特定——都可以计算税款——这时就需要接口来表示
 * 在程序中,我们不需要使用固定的类,我们要使用接口,这就叫面向接口编程
 * 每次我们在程序中需要一个税款计算机,我们就使用接口
 */
public class Main {
    public static void main(String[] args) {
        //这样,这个类就和这个接口有关系,也就是耦合了
        TaxCalculator calculator = getCalculator();
//这个接口很小(只有一个方法),只要以后我们不改变这个方法的名字,这里就不会出现因修改引发的中断,就是低耦合
        calculator.calculateTax();
    }
    //使用static,Main方法才能直接访问它
    public static TaxCalculator getCalculator(){
        return new TaxCalculator2019();
    }
}
Inferface
public interface TaxCalculator {
    //就好像在说,如果你想创建税款计算器类,这个类就应该有这样一个方法
    float calculateTax();
}
实现类
public class TaxCalculator2020 implements TaxCalculator{
    @Override
    public float calculateTax() {
        return 2;
    }
}

public class TaxCalculator2019 implements TaxCalculator {
    @Override
    public float calculateTax() {
        return 1;
    }

    //我们改变了这个类,但是这种改变对这里的main方法没有影响
    //因为我们编程是面向接口,而不是面向具体的类
    public float calculateInstance(){
        return 0;
    }

}

三、封装:

封装就是在一个类中绑定字段和操作字段的方法,并在类的外部隐藏字段的数据或者说状态,我们能防止对象的状态变得不可预知——封装的原则

Account类
public class Account {
    private float balance;
    //deposit:存款
    public void deposit(float amount){
        if(amount>0)
        balance += amount;
    }
    //withdraw:支出
    public void withdraw(float amount){
        if(amount>0)
            balance -= amount;
    }
    //获得余额的方法——读取器getter
    public float getBalance() {
        return balance;
    }
    //设置字段的值——设置器setter
//    public void setBalance(float balance) {
//        if (balance > 0)
//        this.balance = balance;
//    }
}
main类
public class Main {

    public static void main(String[] args) {
        //new对象需要用两次类的名字,所以改为var更好
        var account = new Account();
        //balance不应该有负数,所以需要封装性
//        account.balance = -1;
        account.deposit(10);
        account.withdraw(5);
        System.out.println(account.getBalance());  //5.0
    }

}

四、抽象

抽象的意思,就是我们对外隐藏类当中不必要暴露的细节

(遥控器:我们并不直接操作主板里面的转换器,他们实现了控制细节,我们并不想关心这些细节,我不想搞清楚,当我按开机键时,遥控器内部发生了什么——这就是抽象原则的具体实现)

main类
public class Main {
    public static void main(String[] args) {
        var mailService = new MailService();
        //使用者并不关心怎么连接到服务器,怎么验证账号的合法性,我只关心发送邮件的能力——
        //这时候就需要抽象化
        mailService.sendEmail();
    }
}
MailService 类
public class MailService {
    //现实中应当传入一个Email对象
    public void sendEmail() {
        connect();
        authenticate();
        //Send email
        disconnect();
    }
    /*
    全部更改为private
    这时候我们就算修改任何的私有方法,main方法这里都不会受影响
     */
    //连接
    private void connect() {
        System.out.println("Connect");
    }
    //关闭连接
    private void disconnect() {
        System.out.println("Disonnect");
    }
    //验证
    private void authenticate() {
        System.out.println("Connect");
    }

}

五、继承:实现代码的复用;继承是一种机制,允许我们跨类重复使用代码

使用:可以在一个基类/父类实现这些方法,然后让子类继承它

Main类
public class Main {
    public static void main(String[] args) {
        var textBox = new TextBox();
        //我们没有在文本框类实现,但是在UI控件类实现了
        //但是,文本框类从它的父类,UI控件类当中将这个方法继承过来了
        textBox.enable();
     }
}
UIControl类(父类)
public class UIControl {
    //现在我们需要先创建激活组件,以及让组件失效的能力
    public void enable() {
        System.out.println("enable");
    }
}
TextBox类
public class TextBox extends UIControl{
}

六、多态(Polymorphism):poly的意思是很多,morph意思是形态,所以多态的意思是多种形态----一个对象展现多种形态

使用:一个对象可以展现多种形象

实现类
public class CheckBox extends UIControl {
    @Override
    public void draw() {
        System.out.println("drawing a CheckBox");
    }
}

public class TextBox extends UIControl{
    @Override
    public void draw() {
        System.out.println("drawing a TextBox");
    }
}
UIControl类(父类)
public abstract class UIControl {
    //现在我们需要先创建激活组件,以及让组件失效的能力
    public void enable() {
        System.out.println("enable");
    }
    //如何渲染组件,取决于组件的具体类型
    //1.抽象方法不能有代码块  2.抽象方法应该在一个抽象类
    public abstract void draw();
}
Main类
public class Main {
    public static void main(String[] args) {
        drawUIControl(new TextBox());  //drawing a TextBox
        drawUIControl(new CheckBox());  //drawing a CheckBox
    }
    public static void drawUIControl(UIControl uiControl){
        uiControl.draw();
    }
}

七、UML:Unified Modeling Language——标准建模语言,用来给系统建模的标准语言——表达类与类之间的关系

image.png
继承关系
image.png
组合型关系
image.png

image.png

(还有一种聚合关系)
依赖性关系


image.png

image.png

image.png
三种关系
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • N多年前读过这本书, 当时非常畅销,各大书店都摆在醒目的位置, 我在机场候机闲逛时又看到了, 就买了一本, 对于人...
    雅丝颜阅读 798评论 0 0
  • 从此以后,我经常请阿易和他的奶奶还有别的邻居来我的家里吃饭,不过请的最多的还是阿易一家。也是这样,我的厨艺传遍了全...
    魅影轻纱阅读 197评论 0 0
  • 我想,先生应该是老天派来点化我的使者吧?当我们从激情澎湃的热恋期,一点一点过渡到磨合期开始,也便成了我人生蜕变的开...
    女人如水阅读 484评论 7 34
  • 昨天我们上音乐课了,我们学了一首歌,欢迎你新同学呀多又多你的名字叫什么我叫李晓明我叫李晓明认识你呀,真高兴我们拍手...
    琳娜贝儿呀阅读 221评论 0 0