【java知识总结】设计模式-创建型模式(1)

1、概述

创建型模式主要有单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式
这里主要讲单例模式和三种工厂模式

1 单例模式

  • 导图


    【java知识总结】设计模式-创建型模式(1)_第1张图片
    单例模式.png
  • 类图


    【java知识总结】设计模式-创建型模式(1)_第2张图片
    单例模式类图

1.类图分为三部分,依次是类名、属性、方法
2.以<<开头和以>>结尾的为注释信息
3.修饰符+代表public,-代表private,#代表protected,什么都没有代表包可见。
4.带下划线的属性或方法代表是静态的。

  • 实现代码1(饿汉式单例):
/**
 * 描述:单例模式
 * 通用代码:(是线程安全的)
 */
public class Singleton {

    private static final Singleton singleton = new Singleton();
    //限制产生多个对象
    private Singleton(){
    }
    //通过该方法获得实例对象
    public static Singleton getSingleton(){
        return singleton;
    }
    //类中其他方法,尽量是static
    public static void doSomething(){
        System.out.println(singleton.hashCode());
    }
}
  • 实现代码2(懒汉式单例):

/**
 * 描述:单例模式  线程不安全实例
 */
public class SingletonInstance {
    private static SingletonInstance singleton = null;

    //限制产生多个对象
    private SingletonInstance(){
    }

    //通过该方法获得实例对象 这个方法不是线程安全的,需要加synchronized
    public static SingletonInstance getInstance(){
        if(singleton == null){
            singleton = new SingletonInstance();
        }
        return singleton;
    }

    //类中其他方法,尽量是static
    public static void doSomething(){
        System.out.println(singleton.hashCode());
    }

}

上述两种方式都可实现单例模式,但是需要代码2不是线程安全的,使用的时候需要注意

  • 单例模式的应用

Spring中的Bean,默认就是单例模式
JDK中体现:
(1)Runtime
(2)NumberFormat
类图:


【java知识总结】设计模式-创建型模式(1)_第3张图片
JDK中的Runtime类图

2 工厂方法模式/简单工厂模式

  • 结构图


    【java知识总结】设计模式-创建型模式(1)_第4张图片
    简单工厂模式

/**
 * 描述:运算的基类
 */
public abstract class Operation {

    public abstract int getResult();

}


/**
 * 描述:加法类
 */
public class OperationAdd extends Operation {

    int a,b;

    public OperationAdd(int a, int b) {
        this.a = a;
        this.b = b;
    }
    @Override
    public int getResult() {
        return a + b;
    }
}


/**
 * 描述:减法类
 */
public class OperationSub  extends Operation {

    int a,b;

    public OperationSub(int a, int b) {
        this.a = a;
        this.b = b;
    }
    @Override
    public int getResult() {
        return a - b;
    }
}


/**
 * 描述:计算器(工厂类)
 */
public class OperationFactory {
    public Operation createOperation(String opt, int a, int b) {
        Operation operation = null;
        switch (opt){
            case "+":
                operation = new OperationAdd(a, b);
                break;
            case "-":
                operation = new OperationSub(a, b);
                break;
        }
        return operation;
    }
}

【java知识总结】设计模式-创建型模式(1)_第5张图片
工厂方法模式
  • JKD中的应用

Collection中的iterator方法


【java知识总结】设计模式-创建型模式(1)_第6张图片
1.png

3 抽象工厂模式

【java知识总结】设计模式-创建型模式(1)_第7张图片
结构图

你可能感兴趣的:(【java知识总结】设计模式-创建型模式(1))