java常见的几种设计模式

     2022-03-22     729

关键词:

设计模式

1、概述

1)设计模式(Design pattern):是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结;

2)分类:

创建型模式(创建对象的): 单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。

行为型模式(对象的功能): 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。

结构型模式(对象的组成): 模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

2、简单工厂模式

1)概述:又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例

2)实现:

                        public abstract class Animal {
				public abstract void eat();
			}
			
			public class Cat extends Animal{
				@Override
				public void eat() {
					System.out.println("猫吃鱼");
				}
			}
			
			public class Dog extends Animal{
				@Override
				public void eat() {
					System.out.println("狗吃肉");
				}
			}
			
			public class AnimalFactory {
				public static Animal get(String name){
					if(name.equals("Dog")){
						return new Dog();
					}else if(name.equals("Cat")){
						return new Cat();
					}else{
						return null;
					}
				}
			}
			
			public class Test {
				public static void main(String[] args) {
					AnimalFactory.get("Cat").eat();
					AnimalFactory.get("Dog").eat();
				}
			}


3、工厂方法模式

1)概述:工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现

2)实现:

                        public interface AnimalFactory {

public abstract Animal get() ;

}

--------------------------

public class DogFactory implements AnimalFactory {

@Override

public Animal get() {

return new Dog();

}

}

-------------------------------------

AnimalFactory af = new DogFactory() ;

Animal animal = af.get() ;

animal.eat() ;

4、单例模式

概述:保证类在内存中只有一个对象

1)饿汉式

                        public class Student {
				private final static Student s = new Student();
				private Student() {
					super();
				}
				public static Student get(){
					return s;
				}
			}


2)懒汉式

        

                        public class Teacher {
				private static Teacher t = null;
				public Teacher() {
					super();
				}
				public static Teacher get(){
					if(t == null){
						t = new Teacher();
					}
					return t;
				}
			}


3)Runtime类(单例模式的实现)

概述:每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。可以通过getRuntime方法获取当前运行时对象。

public Process exec(String command)执行Dos命令

5、模版设计模式

1)概述:定义一个算法的骨架,而将具体的算法延迟到子类中来实现

2)实现:

                        public abstract class GetTime {
				public long getTime(){
					long startTime = System.currentTimeMillis();
					work();	//一些耗时操作
					long endTime = System.currentTimeMillis();
					return endTime - startTime;
				}
				public abstract void work();
			}
			
			public class ExtendsGet extends GetTime{
				@Override
				public void work() {
					for(int i = 0;i < 1000;i ++){
						System.out.print(i);
					}
					System.out.println();
				}
			}
			
			public class Test {
				public static void main(String[] args) {
					ExtendsGet eg = new ExtendsGet();
					long time = eg.getTime();
					System.out.println(time);
				}
			}


6、装饰模式

1)概述:使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类。是继承的替代方案

2)实现:(IO流中将File包装成一个高效字符流)

                        public interface Phone {
				void call();
			}
			
			public class CallPhone implements Phone{
				@Override
				public void call() {
					System.out.println("打电话");
				}
			}
			
			public class PhoneDecorate extends CallPhone{
				private Phone phone;
				public PhoneDecorate(Phone phone) {
					super();
					this.phone = phone;
				}
				@Override
				public void call() {
					phone.call();
				}
			}
			
			public class MusicPhone extends PhoneDecorate{
				public MusicPhone(Phone phone) {
					super(phone);
				}
				@Override
				public void call() {
					super.call();
					System.out.println("听音乐");
				}
			}
			
			public class VideoPhone extends PhoneDecorate{
				public VideoPhone(Phone phone) {
					super(phone);
				}
				@Override
				public void call() {
					super.call();
					System.out.println("看视频");
				}
			}
			
			public class Test {
				public static void main(String[] args) {
					new VideoPhone(new MusicPhone(new CallPhone())).call();
				}
			}


7、观察者模式

1)概述:一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象;

2)实现:

                        public class WorkMan {
    				String Manname;
				public WorkMan(String manname) {
					super();
					Manname = manname;
				}
			}
			
			public class Job {
				String jobname;
				int jobmoney;
				public Job(String jobname, int jobmoney) {
					super();
					this.jobname = jobname;
					this.jobmoney = jobmoney;
				}
			}
			
			public class Headhunter {
				private ArrayList<Job> jobal = new ArrayList<>();
				private ArrayList<WorkMan> manal = new ArrayList<>();
				
				public void addWorkMan(WorkMan wm){
					manal.add(wm);
				}
				public void delWorkMan(WorkMan wm){
					manal.remove(wm);
				}
				public void addJob(Job job){
					jobal.add(job);
					sent(job);
				}
				public void delJob(Job job){
					jobal.remove(job);
				}
				private void sent(Job job) {
					for(WorkMan wm : manal){
						System.out.println(wm.Manname + ",你好!有份" + job.jobname 
								+ "的工作,薪资" + job.jobmoney + "元,有意者请及时面试");
					}
				}
			}
			
			public class Test {
				public static void main(String[] args) {
					Headhunter headhunter = new Headhunter();
					WorkMan wm1 = new WorkMan("张三");
					WorkMan wm2 = new WorkMan("李四");
					WorkMan wm3 = new WorkMan("王五");
					headhunter.addWorkMan(wm1);
					headhunter.addWorkMan(wm2);
					headhunter.addWorkMan(wm3);
					Job job1 = new Job("司机", 8000);
					Job job2 = new Job("保姆", 9000);
					Job job3 = new Job("清洁员", 6000);
					headhunter.addJob(job1);
					headhunter.addJob(job2);
					headhunter.addJob(job3);
					headhunter.delWorkMan(wm3);
					headhunter.delJob(job3);
					headhunter.addWorkMan(new WorkMan("赵六"));
					headhunter.addJob(new Job("保安", 7000));
				}
			}


常见的几种单例模式

...ww.cnblogs.com/Ycheng/p/7169381.html单例模式:是一种常用的软件设计模式,在它的核心结构中值包含一个被称为单例的特殊类。一个类只有一个实例,即一个类只有一个对象实例。  对于系统中的某些类来说,只有一个实例很重要,... 查看详情

常见的几种单例模式

单例模式?:系统运行期间,有且仅有一个实例!  1:它必须自行创建这个实例(定义了静态的该类私有对象) 2:一个类只有一个实例(只提供私有构造器(核心)) 3:它必须自行向整个系统提供这个实例(提供一个静态... 查看详情

java常见的几种运行时异常runtimeexception

 常见的几种如下: NullPointerException-空指针引用异常ClassCastException-类型强制转换异常。IllegalArgumentException-传递非法参数异常。ArithmeticException-算术运算异常ArrayStoreException-向数组中存放与声明类型不兼容对象异常IndexOutOfBo... 查看详情

线程安全的单例模式的几种实现

单例模式是一种常见的设计模式;JavaSingleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbagecollection)。 单例模式也是一种比较常见的设... 查看详情

常见的几种单例模式(代码片段)

  单例模式:是一种常用的软件设计模式,在它的核心结构中值包含一个被称为单例的特殊类。一个类只有一个实例,即一个类只有一个对象实例。  对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以... 查看详情

常见的几种单例模式写法(代码片段)

  单例模式:是一种常用的软件设计模式,在它的核心结构中值包含一个被称为单例的特殊类。一个类只有一个实例,即一个类只有一个对象实例。  对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以... 查看详情

关于单利模式的几种实现方式(代码片段)

单例模式是java中非常常见的一种设计模式,也是java学习中很热门的一个知识模块,今天就和大家一起来了解一下单例模式和单例模式的几种实现方式。  单例模式的定义:  单例模式是指某个类只有一个实例,并... 查看详情

java中常见的几种的溢出

...,经常会导致各种各样的溢出,今天本文就举例说明几种常见的溢出堆溢出堆溢出是最常见的一种溢出。导致原因:堆中没有足够的空间储存新生成的实例对象publicstaticvoidmain(String[]args){List<TestCase>cases=newArrayList<TestCase>(... 查看详情

测试用例的几种常见设计方法

测试用例常见的设计方法有:等价类划分法、边界值分析法、错误推测法、判定表法、正交实验法。一.等价类划分法顾名思义,等价类划分,就是将测试的范围划分成几个互不相交的子集,他们的并集是全集,从每个子集选出... 查看详情

java字符串反转常见的几种方式?

(1)通过StringBuilder的reverse()方法,速度最快:1publicclassStringReverse{2publicstaticvoidmain(String[]args){3Stringstr="hello";4System.out.println(reverse(str));56}7publicstaticStringBuilderreverse(Stringstr){8 查看详情

java中最常见的几种运行时异常,你get了吗?

NullPointerException  (空指针异常)ClassCastException  (类型强制转换异常)NumberFormatException  (数字格式异常)NegativeArraySizeException  (数组大小为负数异常)SecurityException  (安全异常)BufferOverFlowException  (缓冲区... 查看详情

常见的几种web网页布局结构(pc端)

...不同的制作者会有不同的布局设计。网页布局有以下几种常见结构:6.上下框架型上下框架型布局与前面的左右框架型布局类似。其区别仅在于是一种上下分为两页的框架。一半深色一半浅色,一般用于设计型站点。优点是视觉... 查看详情

常见的几种异常类型exception

常见异常类型:Java中的异常分为两大类:     1.CheckedException(非RuntimeException)  2.UncheckedException(RuntimeException) 算数异常类:ArithmeticExecption 空指针异常类型:NullPointerException 类型强制转换类型:Cl 查看详情

常见的几种限流算法代码实现(java)(代码片段)

...;在此记录一下以下是原文链接。年轻人,来手撸几种常见的限流算法!限流算法接口publicinterfaceRateLimiter/***判断请求是否能够通过*@return能通过返回true否则false*/booleantryAcquir 查看详情

常见的几种限流算法代码实现(java)(代码片段)

...;在此记录一下以下是原文链接。年轻人,来手撸几种常见的限流算法!限流算法接口publicinterfaceRateLimiter/***判断请求是否能够通过*@return能通过返回true否则false*/booleantryAcquir 查看详情

简要分析java程序的几种设计模式

  今天整理了一下已学的几种JAVA设计模式,也是比较经典常用的几种。 1 单例模式singelton  项目开发中往往有这样的需求:某个对象只需要存在一个(不用new出多个)即保证该类有且只有一个实例  单例模式有... 查看详情

js-javascript常见的创建对象的几种方式

1、通过Object构造函数或对象字面量创建单个对象  这些方式有明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码。为了解决这个问题,出现了工厂模式。2、工厂模式  考虑在ES中无法创建类(ES6前),开... 查看详情

java的几种设计模式

                                 &n 查看详情