设计模式,单例,工厂,模板,

单例—饿汉:
在这里插入图片描述

/***
 * 单例设计模式——饿汉式
 */
public class single01 {
    /**
     *  类Single对象具有唯一性
     *  实现步骤:
     *    1: 私有构造方法
     *    2: 自己创建自己类的对象
     *    3: 提供公共的访问方式,方法
     *
     *    只能通过方法 getInstance()获取对象
     *    需要对象才能调用,非静态的
     *    只有一个调用方法 类.方法()
     *
     *    单例设计模式-饿汉式
     *
     *    运行一个类,必须进入内存(方法区)
     *    类进入内存,初始化自己的静态成员
     */
    private single01(){};
    private static single01 sin = new single01();
    public static single01 getInstance(){
        return sin;
    }
}
public class Test {
    /*
     *  设计模式:
     *    在软件开发,遇到各种问题,汇总处理
     *    前人将问题,经验汇总处理,方式称为设计模式
     *    基于面向对象思想
     *    Java中23种设计模式
     *
     *  单例设计模式: 保证一个类的对象,在内存中唯一性
     */
    public static void main(String[] args) {
        //通过静态的类方法得到,静态属性
        single01 single = single01.getInstance();
        System.out.println(single);
        single01 single1 = single01.getInstance();
        System.out.println(single);
        single01 single2 = single01.getInstance();
        System.out.println(single);
        single01 single3 = single01.getInstance();
        System.out.println(single);
    }
}

单例—懒汉:
在这里插入图片描述

/**
 *  类Single对象具有唯一性
 *  单例中的懒汉式,对象延迟加载
 *
 *  实现步骤:
 *    1: 私有构造方法
 *    2: 自己创建自己类的变量,不创建对象
 *    3: 提供公共的访问方式,方法

 */
public class single02 {
    //私有构造方法
    private single02(){}
    //自己创建自己类的变量,不创建对象
    private static single02 s = null;
    //定义方法,返回本类对象
    //保证多线程运行的安全问题, 同步方法
    //synchronized同步锁,方法,只能被一个线程调用
    public static  synchronized single02 getInstance(){
        //判断变量s是不是null
        if(s == null){
            s = new single02();
        }
        return s;
    }

}
public class Test {
    public static void main(String[] args) {
        List<single02> single02List = new ArrayList<>();
        for (int i = 0; i <3 ; i++) {
            single02 instance = single02.getInstance();
            single02List.add(instance);
        }
        for (single02 single02 : single02List) {
            System.out.println(single02);
        }

    }
}

工厂模式:
在这里插入图片描述
子类实现父类的方法:

public abstract class Animal {
    public abstract void  eat();
}
public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫咪喵喵叫");
    }
}
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗狗汪汪叫");
    }
}

工厂类

/*
 * 工厂类,定义方法,创建动物对象
 * 下订单,方法参数
 */
public class Factory {
    public Animal fator(String name){
        if ("cat".equals(name)){
            return new Cat();
        }
        if ("dog".equals(name)){
            return new Dog();
        }
        return null;
    }
}

测试:

/**
 *  简单工厂设计:
 *    工厂创建产品,工厂是创建对象的
 *    创建什么对象: 范围,动物对象
 *    创建对象,下订单
 */
public class Test {
    public static void main(String[] args) {
        Factory factory = new Factory();
        //工厂类的方法,获取对象
        Animal cat =  factory.fator("cat");
        cat.eat();

        Animal dog =  factory.fator("dog");
        dog.eat();
    }
}

模板模式:
在这里插入图片描述
在这里插入图片描述

public abstract class Template {
    /*
     * 功能有的知道,有的不知道
     * 不知道部分: 对外暴露出去(方法),
     * 等待子类延迟实现
     */

    public void formart(){
        template();
    }

    public abstract void template();
}
public class SubTempate extends Template {
    @Override
    public void template() {
        SimpleDateFormat simpleDateFormat =
                new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(simpleDateFormat.format(new Date()));
    }
}
public class Test {
    /**
     *   模版方法设计:
     *     实现功能: 功能一部分清楚,一部分不清楚
     *     Web: HTTP协议: 传输什么
     */
    public static void main(String[] args) {
        //通过多态new子类对象,用父类对象来存
        Template template = new SubTempate();
        //调用父类中的暴露的打印时间方法,其中具体的时间方法,
        // 由实现模板的子类方法来实现。
        // 也就是执行的是子类的实现方法。
        template.formart();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值