java面向对象之设计思想

模板设计思想

模板设计模式(思想)

程序由确定的部分 和 不确定的部分组成

这时可以把不确定的部分抽象出来

然后对外开放可以放可以访问的方式

重写抽象方法 来完成不确定部分

需求 :

计算一个程序的执行时间

abstract class GetTime{
    public void getTime(){
        long s = System.currentTimeMillis();
        fun();


        long s = System.currentTimeMillis();
        System.out.println(s-m+"毫秒");
    }
        // 把要执行的程序抽取成方法
    // 不知道怎么写实现部分 可以先不写
    // 定义成抽象方法 强制子类去重写方法
    public abstract void fun();

}
// 使用继承
class subTime extends GetTime{
    // 重写fun方法
    public void fun() {
        // TODO Auto-generated method stub
        // 写20000次循环
        for (int i = 0; i < 20000; i++) {
            System.out.println("i");
        }

    }
}

复合

一个类中有另一个类的对象

在一个类中 成员变量 如果还包括一些具体的属性

这个成员变量需要被定义成一个类 那么就需要用

复合 的思想

举个例子

需求
1.人类 吃

2.男人类 姓名 性别 有女朋友 吃肉 介绍女朋友是谁

3.女人类 姓名 性别 有男朋友 吃素 介绍女朋友是谁

4.男人挣钱给女朋友花(接口实现)

人类

abstract class People{
    public String name;
    public String gender;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public People(){

    }
    public People(String name,String gender){
        this.name = name;
        this.gender = gender;
    }

    public abstract void eat();
    public abstract void have();
    public abstract void intruduce();
    }

男人类

abstract class People{
    public String name;
    public String gender;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public People(){

    }
    public People(String name,String gender){
        this.name = name;
        this.gender = gender;
    }

    public abstract void eat();
    public abstract void have();
    public abstract void intruduce();
    }


class Man extends People implements MakeMoney{
    // 定义一个成员变量 是女人类的对象
    private  Woman gf;

    public Man(){

    }
    public  Man(String name,String gender) {
        super(name, gender);
    }
    // 给 gf 写 set/get方法
    public void setGF(Woman gf) {
        this.gf = gf;
    }
    public Woman getGF() {
        return gf;
    }

    @Override
    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("吃肉");
    }

    @Override
    public void have() {
        // TODO Auto-generated method stub
        System.out.println("我有女朋友");
    }

    @Override
    public void intruduce() {
        // TODO Auto-generated method stub
        System.out.println("我是:"+this.getName());
        System.out.println("我的女朋友是:"+gf.getName());
    }

    @Override
    public void makeMoney() {
        // TODO Auto-generated method stub
        System.out.println("等我几年 我会换掉你的 ");
    }


}

女人类

class Woman extends People{
    private Man bf;

    public Woman() {

    }
    public Woman(String name,String gender) {
        super(name, gender);
    }
    public void setBF(Man bf) {
        this.bf = bf;
    }
    public Man getBF() {
        return bf;
    }

    @Override
    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("吃素");
    }

    @Override
    public void have() {
        // TODO Auto-generated method stub
        System.out.println("有男朋友");
    }

    @Override
    public void intruduce() {
        // TODO Auto-generated method stub
        System.out.println("我是:"+this.getName());
        System.out.println("我的男朋友是:"+bf.getName());
    }
    // 整容
    public void zhengRong(String body) {
        intruduce();
        System.out.println("我要整容"+body);

    }
    public void letMakeMoney(Man bf) {
        System.out.println("让"+bf.name +"挣钱");
    }



}

测试类

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Man man = new Man("凉凉","男");
        Woman woman = new Woman("如花","女");

        //给凉凉找个妹子
        // 创建一个女的出来
        //

        man.setGF(woman);
        man.intruduce();
        //找个男的
        woman.setBF(man);

        woman.intruduce();
        //
        Woman gf = man.getGF();
        //获取类的对象后就可以使用找个类的对象中所有方法
        gf.zhengRong("丰唇");
        //让男的去挣钱
        gf.letMakeMoney(man);
        //从女的类的对象 中 获取bf
        Man bf = woman.getBF();
        bf.makeMoney();

    }

}

单例设计思想–(重点在于思想)

核心:在整个程序执行期间 不管你创建这个类的对象多少个

整个程序有且只有一个 该类的对象 单实例对象

手机听歌

不管你是前台听歌 还是后台听歌 访问的都是

一个对象(同一个音乐播放器)

如何写一个单例思路

1.不让外界创建对象 (把构造犯法 私有化)

2.自己来创建这个对象(写个创建对象自定义方法)

3.对外开放访问该对象权限 把对象的访问方法

(只对外提供获取方法)

他在内存中的表现
这里写图片描述

// 单例类(饿汉式)
class Single{
    //创建单例对象
    private static Single single = new Single();
    // 私有化构造方法
    private Single() {

    }
    // 对外暴露访问接口(get方法)
    public static Single getInstance() {
        return single;
    }
}
// (单例)懒汉式 与 饿汗式写法不同
// 模板 工厂 反射工厂 适配器
/*
 * 懒汉式特点:延迟加载(懒加载)
 * 只有你调用单例方法时 才会创建对象
 * 而不是跟恶汉式一样随着类的加载而加载
 * 
 */
class SingleLan{
    // 创建
    // 私有化构造方法
    // 对外开放访问的方法
    private static SingleLan single = null; ;
    private SingleLan() {

    }
    //对外开放访问的方法 (当用户调用get方法时候再创建对象)
    public static SingleLan getInstance() {
        //当单例 对象 为空时 会创建对象 
        //一旦对象 创建出来了 就不为空 
        // 所以这个单例对象 指挥创建一次
        if(single == null) {
            single = new SingleLan();
        }
        return single;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值