JAVA学习笔记(五十七)- 常用设计模式

单例模式

/*
 * 单例模式
 * 应用场合:有些对象只需要一个,此时可以使用单例模式
 * 作用:保证整个应用中某个实例有且只有一个
 * 类型:饿汉模式、懒汉模式
 */
public class Test04 {
    // 1.将构造方式私有化,不允许外界直接创建对象
    private Test04() {
    }

    // 2.创建类的唯一对象,使用private static修饰
    private static Test04 instance=new Test04();

    // 3.提供一个用于获取唯一实例的方法,使用public static修饰
    public static Test04 getInstance(){
        return instance;
    }
}

懒汉模式

/*
 * 懒汉模式
 * 区别:
 * 1.饿汉模式的特点,在类加载时会创建类的唯一实例,导致类加载比较慢,但运行时获取对象的速度较快,线程安全
 * 2.懒汉模式的特点,在第一次获取实例时会创建类的唯一实例,导致第一次获取时较慢,但类加载比较快,线程不安全
 *
 */
public class Test05 {
    // 1.将构造方法私有化
    private Test05() {
    }

    // 2.声明类的唯一实例,但并未实例化
    private static Test05 instance;

    // 3.提供一个用于获取唯一实例的静态方法
    public static Test05 getInstance() {
        if(instance==null){
            instance=new Test05();//判断如果为空,则创建一个唯一的实例
        }
        return instance;
    }
}

工厂模式

/*
 * 工厂模式Factory Method
 * 简单工厂模式
 * 定义:建立一个工厂类,对实现了同一个接口的多个类进行实例化对象的操作
 */
public class Test06 {
    public static void main(String[] args) {
        Factory factory=new Factory();
        Moveable m1=factory.product("plane");
        Moveable m2=factory.product("bus");
        Moveable m3=factory.product("bike");
        m2.move();
    }
}

interface Moveable {
    public void move();
}

class Plane implements Moveable {

    @Override
    public void move() {
        System.out.println("马航死亡航班。。。");
    }
}

class Bus implements Moveable {

    @Override
    public void move() {
        System.out.println("昌河校车。。。");
    }
}

class Bike implements Moveable {

    @Override
    public void move() {
        System.out.println("捷安特自行车");
    }
}

/*
 * 生产产品的工厂类
 */
class Factory {
    public Moveable product(String need) {
        if (need.equals("plane")) {
            return new Plane();
        } else if (need.equals("bus")) {
            return new Bus();
        } else {
            return new Bike();
        }
    }
}
时间: 2024-08-02 05:02:12

JAVA学习笔记(五十七)- 常用设计模式的相关文章

Java学习笔记五:复用类

当我们在使用第三方或者其他人已经写好的类时,通常有两种方法: (1).组合:在新的类中产生现有类的引用. (2).继承:按照现有类的类型创建新类.   1.组合 简单理解就是新类中,创建一个变量,变量的引用为现有类. 我们在很多场景下都是用到组合,如: public class Lesson_04_Extend { private Extend1 extend1; // 组合方式,创建成员变量(UML 组合关系) public void print(Extend1 extend2) // (UM

Java学习笔记五(多线程)

1.介绍 线程能够使程序具有两条和两条以上的可执行的路径,尤其对多核CPU特别的重要. 2.创建线程 1.继承Thread类 一个类直接的继承Thread类的话,此类就具有了线程的能力,接下来只需要重写继承的run()即可. <span style="font-size:18px;">package com.Thread; //定义实现Runnable接口的类 class MyThread11 extends Thread { //实现run方法,指定线程执行的任务 pub

JAVA学习笔记(四十七)- 事件监听

定义ActionListener接口的实现类实现事件监听 import java.awt.Button; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; /* * 事件监听 */ public class Te

Java学习笔记五——流程控制

分支结构 Java提供了两种常见的分支控制结构:if语句和switch语句. if语句 if语句使用布尔值或布尔表达式(表达式结果为布尔值),if语句有3中形式: 第一种形式: if (5 > 3) { System.out.println("5 > 3"); } 第二种形式: if (5 > 3) { System.out.println("5 > 3"); } else{ System.out.println("5 < 3

JAVA学习笔记(五十)- JDBC Java数据库连接

JDBC操作步骤 /* * JDBC操作步骤 * */ public class Test01 { public static void main(String[] args) { try { //1.加载并注册驱动 Class.forName("com.mysql.jdbc.Driver"); //DriverManager.registerDriver(new com.mysql.jdbc.Driver()); System.out.println("注册驱动成功!&qu

JAVA学习笔记(五十一)- DBUtil 封装数据库工具类

数据库工具类 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /* * 数据库工具类 */ public class DBUtil { // 获取数据库连接 public static Connection getConnection() { String dr

JAVA学习笔记(五十九)- Socket编程

客户端 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.UnknownHostException; /* * 客户端 */ public class Client { public static void main(String[] args) throws IOExcep

JAVA学习第五十七课 — IO流(十一)

一.管道流 PipedInputStream 和 PipedOutPutStream 输入和输出能够直接进行连接.结合线程使用 管道流,顾名思义,写一个读一个.连成一个管子 API文档:管道输入流应该连接到管道输出流:管道输入流提供要写入管道输出流的全部数据字节.通常,数据由某个线程从 PipedInputStream 对象读取,并由其它线程将其写入到对应的 PipedOutputStream. 不建议对这两个对象尝试使用单个线程.由于这样可能死锁线程. 管道输入流包括一个缓冲区.可在缓冲区限定

JAVA学习笔记(五十二)- 开发DAO层的经典实现

StudentDAO接口,定义学生相关的操作 /* * StudentDAO接口,定义学生相关的操作 */ public interface StudentDAO { //添加学生 public void addStudent(Student stu); //删除学生 public void deleteStudent(int id); //修改学生 public void updateStudent(Student stu); //查询所有学生 public List<Student> ge