设计模式


单例模式
总结:
1. 单例模式的核心作用是什么?
2. 单例模式的常见应用场景?
3. 单例模式的优点?
4. 常见的主要的单例模式?
5. 单例模式如何实现?
6. 懒汉式和饿汉式的区别?
工厂模式
总结:
1. 什么是工厂模式?
2. 工厂模式的特点?
3. 主要基本原则
4. 工厂模式分类
5. 工厂模式的应用
6. 工厂模式用来解决什么问题。
代理模式
总结
设计模式共有23种,他是一种程序设计的思路,只要是面向对象语言,比如C#等其他的语言,都存在设计模式,代码不同,但是思路都是通的。
设计模式的分类:

主要学习单例模式和工厂模式。
单例模式
总结:
一句话总结:一个类在Java虚拟机中只有一个对象,并提供一个全局访问点。

生活中例子:太阳、月亮、国家主席等。

解决什么问题:对象的唯一性,性能浪费太多。

项目里面怎么用:数据库连接对象,属性配置文件的读取对象。

模式结构:分为饿汉式和懒汉式(如果考虑性能问题的话,就使用懒汉式,因为懒汉式是在方法里面进行初始化的),构造器私 有化,对外提供方法加同步关键字。

框架里面使用:Struts1的Action。

JDK里面使用:java.lang.Runtime#getRuntimejava.awt.Desktop#getDesktop。

1. 单例模式的核心作用是什么?
保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。
2. 单例模式的常见应用场景?
在项目种加载配置文件的类,一般也只是一个对象,没有必要重复加载。
一个项目种的数据库连接池,设计的时候一般是单例模式。因为数据库连接是一种数据库资源,保证提供一个对象来访问数据库资源。每次都new的话,很消耗资源。
在Spring种,每个bean默认就是单例的,这样做的优点是spring容器可以管理。
springmvc中,控制器对象也是单例。
在serviet编程种,每个servlet也是单例。
3. 单例模式的优点?
单例模式只生成一个实例,减少了系统的开销。
单例模式可以在系统设置全局的访问点,优化共享资源的访问,例如设计一个单例类,负责所有数据表的映射处理。
4. 常见的主要的单例模式?
饿汉式:线程安全,调用效率高,但是,不能延时加载。
懒汉式:线程安全,调用效率不高,但是,可以延时加载。
静态内部类式:线程安全,调用效率高,但是,可以延时加载。
双重检测锁(由于jvm底层内部模型原因,偶尔出问题,不建议使用)
枚举单例:线程安全,调用效率高,不能延时加载。
5. 单例模式如何实现?
构造器私有。
提供一个私有的静态对象。
提供一个公共的静态方法,返回该对象。
6. 懒汉式和饿汉式的区别?
首先他俩的都是线程安全的。但是实现线程安全的方式不同,饿汉基于 classloder 机制避免了多线程的同步问题,懒汉方法加了同步锁。
饿汉没有延时加载,懒汉有延时加载。
饿汉没有同步锁,执行效率高于懒汉。
饿汉在类加载时就创建对象,浪费内存,资源消耗高于懒汉。
如果类的创建时代价很高,推荐使用懒汉式,节省资源,但是调用效率低。如果类的调用效率高,推荐使用饿汉式。
    package com.aaa.test;
/**
 * 饿汉式
 * @author admin
 *
 */
public class SingletonDome {
    //私有的静态方法,当类加载时就创建对象。
    private static SingletonDome s = new SingletonDome();
    /**
     * 私有构造
     */
    private SingletonDome() {
    }
    /**
     * 公共的全局的方法
     * @return
     */
    public static SingletonDome getIntance(){
        return s;
    }
    
}

/**
 * 懒汉式
 * @author admin
 *
 */
public class SingletonDome1 {
    //当类加载时,不创建对象,判断后在创建
    private static SingletonDome1 s;
    /**
     * 私有的构造方法
     */
    private SingletonDome1() {
    }
    /**
     * 加上同步锁,保证线程安全。
     * @return
     */
    public static synchronized SingletonDome1 getInstance(){
        if(s==null){
            s = new SingletonDome1();
        }
        return s;
    }

}

工厂模式
总结:
一句话总结:用一个方法来代替new关键字

生活中的例子:制衣厂、面包厂等生产厂。

解决什么问题:对象产生过多,或者经常有子类替换生成。

项目里面怎么用:对于经常生成的对象,或者父子类替换的对象。

模式结构:写一个对外声明的方法,方法里面使用new关键字代替。

框架里面使用:spring的核心就是工厂模式。

JDK里面使用:newInstance。

1. 什么是工厂模式?
工厂模式就是帮我们实例化对象的,实现创建者和调用者分离。
2. 工厂模式的特点?
分工,专业的人干专业的事。
3. 主要基本原则
一共有六个。
开闭原则:一个软件的实体应当对扩展开放,对修改关闭。
依赖倒转原则:面向接口编程,不要针对实现编程。
迪米特法则:只要你直接的朋友通信,而避免和陌生人通信。解耦。
4. 工厂模式分类
简单工厂模式:用来生产同一等级结构中的任意产品。
工厂方法模式:用来生产统一等级结构中的固定产品。
抽象工厂模式:又来生产不同产品族的全部产品。
5. 工厂模式的应用
spring的核心就是工厂模式
6. 工厂模式用来解决什么问题。
对象产生过多,或者经常有子类替换生成。解耦和。
代理模式
总结
一句话总结:为其他对象提供一个代理,以控制对当前对象的访问。

生活中的例子:房屋中介、婚姻介绍所。

解决什么问题:不能直接访问该对象,或者太大的资源耗费多。

项目里面怎么用:权限,或者大对象的访问权限。

模式结构:代理类和被代理类实现同一个接口,用户访问的时候先访问代理对象,然后让代理对象去访问被代理对象。

框架里面使用:Spring里面的AOP实现。

JDK里面使用:java.lang.reflect.Proxy。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值