美文网首页Java设计模式
【java知识总结】设计模式-创建型模式(1)

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

作者: 代码足迹 | 来源:发表于2018-05-16 10:48 被阅读86次

    1、概述

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

    1 单例模式

    • 导图


      单例模式.png
    • 类图


      单例模式类图

    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
    类图:


    JDK中的Runtime类图

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

    • 结构图


      简单工厂模式
    
    /**
     * 描述:运算的基类
     */
    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;
        }
    }
    
    
    工厂方法模式
    • JKD中的应用

    Collection中的iterator方法


    1.png

    3 抽象工厂模式

    结构图

    相关文章

      网友评论

      本文标题:【java知识总结】设计模式-创建型模式(1)

      本文链接:https://www.haomeiwen.com/subject/soxpdftx.html