Java三种设计模式
Java设计模式
1,静态工厂方法模式
提供一个工厂类,构造方法私有,不允许外界直接创建该工厂类的对象.
在工厂类中添加一个静态方法,用于创建对象并返回.
缺点:不利于后期维护
如果后期要再创建类,还要再创建类并在静态工厂类中添加新的功能.
/**
* 动物的工厂类
* @author Apple
*/
public class AnimalFactory {
//私有功能
private AnimalFactory(){}
//工厂改进:提供猫和狗这两种动物
public static Animal createAnimal(String type){if("dog".equals(type)){return new Dog() ; }else if("cat".equals(type)){return new Cat() ;}else {return null ;}
}
}
2,工厂方法模式
需要提供抽象类,具体的类,一个工厂接口,以及具体的类的工厂类实现工厂接口.
该工厂接口中的抽象方法的返回值是该抽象类
针对每个具体动物都提供一些对应的工厂类—>实现该接口—>返回值就是需要具体的动物对象
缺点:代码量太大
/工厂的接口
public interface Factory {
//就是用来提供常见具体动物的功能
public abstract Animal createAnimal() ;
}
public class CatFactory implements Factory {
//由猫工厂类提供对象
@Override
public Animal createAnimal() {
return new Cat() ;
}
}
3,单例模式
在内存中始终只有一个该类对象
饿汉式
特点:一加载该类便会创建一个对象
要求:无参构造私有化
在成员变量位置创建该类的实例
需要提供公共的访问方法
//饿汉式
public class Student {
//无参构造私有化,目的是为了让外界不创建对象
private Student(){}//在成员变量的位置创建该类的实例
//静态只能访问静态,所以需要加上静态修饰
//为了不让外界修改当前这个实例,所以加入private修饰
private static Student s = new Student() ;//提供给公共的访问方法,返回值就是该类的实例对象
public static Student getStudent(){return s ;
}
}
懒汉式
特点:并不是加载某个类就直接创建对象,而是在需要的时候再创建对象
1)懒加载
2)线程的安全问题:使用同步代码块进行解决
public class Teacher {
/*** 构造方法私有化*/
private Teacher(){}//在成员变量位置声明变量
private static Teacher t = null ; //共享数据//提供公共的方法访问
public synchronized static Teacher getTeacher(){ //Teacher.class锁对象//判断 当当前该对象没有更多引用的时候,才创建对象//t1,t1 ,t3 三个对象if(t==null){t = new Teacher() ;}return t ;
}
}
如果是开发中使用的是———>饿汉式(不会出现问题的单例模式)
如果是面试中使用的是———->懒汉式(可能会出现问题的单例模式,线程安全问题)
面试题: 简单阐述下单例模式有几种,并且写出一个单例模式代码!(写懒汉式) 就想问你能否想到懒汉式中多线程的安全问题…
4,装饰者设计模式
子类封装子类
Java三种设计模式相关推荐
- java中控制反转_Java如何利用IOC控制反转的三种设计模式详解
这篇文章主要为大家详细介绍了Java使用IOC控制反转的三种设计模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 对于许多开发人员来说,控制反演(IoC)都是一个模糊的概念,因为他们在现实世界中 ...
- 剖析java三种工厂设计模式
java三种工厂设计模式 1. 简单工厂模式 简单工厂有以下三个主角: Factory:工厂负责生产产品 AbstructProduct:抽象产品,就好比华为手机,我没说是华为那个型号手机. Prod ...
- java 23种设计模式及具体例子 收藏有时间慢慢看
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...
- java 23种设计模式(转载)
设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- java 23种设计模式 04 单例模式
java 23种设计模式 04 单例模式 一.什么是单例模式 单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象.也就是说,在整个程序空间中,该类只存在一个实例对象. ...
- 干掉if else!试试这三种设计模式,优化代码贼顺手!
点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...
- java同步异步调用_详解java 三种调用机制(同步、回调、异步)
1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,jsPwwCe它是一种单向调用 2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口: 3:异步调用:一种类似消 ...
- java 三种将list转换为map的方法详解
这篇文章主要介绍了java 三种将list转换为map的方法详解的相关资料,需要的朋友可以参考下 java 三种将list转换为map的方法详解 在本文中,介绍三种将list转换为map的方法: 1) ...
- JAVA 三种线程实现创建方式
JAVA 三种线程实现/创建方式 方式一:继承Thread类 通过继承Thread类来创建一个自定义线程类.Thread类本质上就继承了Runable接口,代表一个线程类.启动线程的唯一办法就是通过T ...
最新文章
- python GUI编程( 二 ) (基于PyQt5)
- CurcveLane-NAS:华为中大提出一种结合NAS的曲线车道检测算法
- mysql-proxy 0.8.5_主从读写分离----mysql-proxy0.8.5安装与配置
- ISR:中断服务程序需要满足的要求
- 如何修改mysql服务器,怎么修改mysql服务器地址
- Java Agent
- powershell 常用命令笔记
- lucene 多索引目录搜索实现方法
- 在线考试系统需求分析
- 算法每日一题--分治算法(一)-李富贵要上岸985
- 教你识别一些sequence的相关问题
- JDK、TOMCAT 配置环境变量
- java时间随机数_java开发代码工具类(时间戳/随机数/日期等)
- php如何跟踪调试,PHP使用debug_backtrace方法跟踪调试代码调用详解
- 用Python抓取网页并解析
- 第四十七节,random 随机数模块
- C++中对象初始化赋值是否需要调用operator=函数
- 玩转c语言——c语言小游戏 迷宫小游戏(附源码)
- 在群晖NAS上使用Docker 蒲公英
- example包下载