美文网首页
设计模式

设计模式

作者: 孙浩j | 来源:发表于2017-12-17 20:56 被阅读9次

java中共有23种设计模式:前人不断改善某以功能代码,最后形成了一种最简单,最通用的编写方式,人们把这种定义模式叫做设计模式


多态存在的问题:虽然当想访问对象的时候不用更改方法,直接改实例就可以,但是如果创建实例太多的时候,也会变得麻烦起来

简单静态工厂模式

使用工厂类创建对象,之后通过调用工厂方法进行创建对象

优点:1.提高安全性

          2.便于程序扩展

          3.提高工作性能

1.在工厂类中写一个静态获取对象的方法

public class Factory {   

public static Person getP(){

return new Student() ;

}

}

2.调用方法的时候通过调用工厂类的静态方法获取对象,这样更改获取对象的时候,只改工厂类的静态方法就可以

单例模式:单实例,一个类只能创建一个对象

饿汉式(很饿,一开始就要创建)

1,创建私有的静态的本类对象变量。               

2,私有构造方法

3,对外提供一个静态方法,用来获取该对象

private static Student s=new Student();

private Student(){}

public static Student getS(){

return s;

}


懒汉式(很懒用的时候再创建)

1,创建私有的静态本类变量(不引用对象)

2.私有构造方法

3.对外提供一个静态方法,用来获取该对象,如果本类引用的为空创建一个对象,如果不为空返回该对象

private Teacher t;

private Teacher(){}

public Teacher getT(){

if(t==null){

t=new Teacher();

}

return t;

}

单例模式顾名思义就是为了只创建一个对象,在不考虑多线程的时候我们通过一个if就可以解决这个问题了,但是如果有多个线程创建对象的话,可能会同时进入方法,在第一个线程没有创建完对象的时候,第二个线程完成了是否有对象的判断,这样第二个线程也会发现没有对象,也会去创建对象,这样就会创建两个对象了,由此我们使用同步代码块,解决了在第一个线程没有创建对象完毕,第二个线程是不会去判断是否有对象的。当使用同步代码块后,第一个线程进入之后发现没有对象,就创建了一个,之后的所有线程都要排着队去判断是否已经存在对象了,这样是十分慢的,我们想要在第一个线程创建完对象之后,之后所有的线程可以一起去判断有没有对象,我们就引入了第二个if用来避开同步代码块。

        如果没有第二个if  经过第一个if的判断两个线程发现都没有对象,所以都进入了到if里了,之后第一个线程创建了一个对象之后,由于内部并没有判断,第二个线程又创建一个对象。而如果有了内部的if判断的话,第一个线程进入后判断对象为空创建对象,这时候有了对象了,第二个线程进入后发现有对象了了,就会直接return已经创建的对象,没有第二个if同步代码块内只有一条语句,失去了同步的意义,相当于没有同步代码块。没对象需要同步访问,有对象可以异步访问速度快

第二个if解决的是在没有对象的时候,当很多线程都到达了方法前准备访问方法的时候,所有线程会排队访问,在这时只有第一个线程会创建对象,保证了多线程下的对象的唯一性;第一个if是为了解决当有了一个对象之后,将新来的线程拦截在外边,防止多线程访问同步代码块,出现多线程排队去判断是否已经存在对象的问题

第一个if解决效率,第二个if解决同步问题。(同步代码效率低)

在实际开发过程中一般使用饿汉,懒汉虽然节约内存,每次使用都要创建对象,消耗时间

相关文章

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • 浅谈JS的一些设计模式

    @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 设计模式简介 设计模式概念解读 设计模式的发展与...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 第1章 设计模式概述

    一、设计模式的概念 二、设计模式的历史 三、设计模式的要素 四、设计模式的分类 ■ 创建型设计模式 ■ 结构型设计...

  • iOS设计模式(3)适配器模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(4)抽象工...

网友评论

      本文标题:设计模式

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