本篇主要记录一些常见的设计模式,后续学习中会持续更新
目前我所了解的有单例设计模式,简单工厂设计模式,装饰设计模式。
设计模式是对前人经验和智慧的总结,了解并学会使用其中的几种 设计模式可以提高我们的工作效率,每一种设计模式都用于解决某种特定的问题,这样以后再碰到此类问题,我们可以不假思索的使用相应的设计模式解决。
软件设计有一个原则就是封装变化点,将程序中经常变化的部分封装起来可以降低类与类之间的耦合性
1,简单工厂设计模式
示例代码段1:通过代码演示简单工厂通过参数创建对象的过程
以卖票为例
票的父类
class Ticket(){ }
学生票子类
class StudentTicket extends Ticket{ }
赠票子类
class FreeTicket extends Ticket{ }
创建子类对象的简单工厂类,要创建相应的子类对象,只要传入对象对应的参数类型就哦了
class TicketFactory { public static Ticket CreateTicket(string type) { Ticket t= null; switch (type) { case "studentTicket": t = new StudentTicket(); break; case "freeTicket": t = new FreeTicket(); break; default: t = new Ticket(); break; } return t; } } }
2.单例设计模式
解决的问题:就是可以保证一个类在内存中的对象唯一性。
应用的场景:必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。
如何保证对象唯一性呢?
1,不允许其他程序用new创建该类对象。
2,在该类创建一个本类实例。
3,对外提供一个方法让其他程序可以获取该对象。
解决步骤
1,私有化该类构造函数。
2,通过new在本类中创建一个本类对象。
3,定义一个公有的方法,将创建的对象返回。
单例设计模式之饿汉式。(多线程是安全的,优先选择)
class Single//类一加载,对象就已经存在了。 { private static Single s = new Single(); private Single(){} public static Single getInstance() { return s; } }
单例设计模式之懒汉式。(线程是非安全的)
class Single2//类加载进来,没有对象,只有调用了getInstance方法时,才会创建对象。 //延迟加载形式。 { private static Single2 s = null; private Single2(){} public static Single2 getInstance() { if(s==null) s = new Single2(); return s; } }
单例设计模式之懒汉式解决线程安全的问题
class Single { private static Single s = null; private Single(){} public static Single getInstance() { 加入双重判断是为了解决效率问题。 if(s==null) { 加入同步为了解决多线程安全问题。 synchronized(Single.class) { if(s==null) s = new Single(); } } return s; } }
3.装饰设计模式
特点:进行功能的扩展增强
装饰类和被装饰类都必须所属同一个接口或者父类
应用:对一组对象的功能进行增强时,就可以使用该模式进行问题的解决
和继承的区别:相同点:装饰和继承都能实现一样的特点:进行功能的扩展增强。
不同点:使用继承实现对功能的扩展,比如:Writer
|--TextWriter:用于操作文本
|--BufferTextWriter:加入了缓冲技术的操作文本的对象。
|--MediaWriter:用于操作媒体。
|--BufferMediaWriter
如果这个体系进行功能的扩展,就会增加很多的流对象,这时就会发现只为提高功能而进行的继承,导致继承体系越来越臃肿,不够灵活。
使用装饰设计模式,将缓冲进行单独的封装,哪个对象需要缓冲就将哪个对象和缓冲关联
class BufferWriter extends Writer{
BufferWriter(Writer w)
{
}
}
Writer
|--TextWriter:用于操作文本
|--MediaWriter:用于操作媒体。
|--BufferWriter:用于提高效率。
可以看出装饰设计模式显得更加灵活
相关推荐
黑马程序员是一家知名的IT教育机构,他们提供的Javaweb教材源码是为了帮助学员深入理解和实践Web开发技术。下面将详细介绍JavaWeb的基本概念、核心技术和黑马程序员源码在学习过程中的作用。 1. **JavaWeb基础** ...
4. **MVC模式**:Model-View-Controller(MVC)是一种常见的软件设计模式,用于分离业务逻辑、数据模型和用户界面。书中会介绍如何在Java Web应用中实现MVC架构,使用Servlet作为Controller,JavaBean作为Model,JSP...
内容概要:通过带着读者手写简化版 Spring 框架了解 Spring 核心原理。在手写Spring源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程保留核心功能, ...本代码基于黑马程序员的课程,最好根据课程同步学习
3. **Web开发**:使用Flask或Django框架开发Web应用,了解HTTP协议和MVC设计模式。 4. **自动化脚本**:编写日常任务的自动化脚本,如文件管理、邮件发送等。 通过黑马程序员的Python教程,你将逐步建立起扎实的...
Struts2.1 是一个基于模型-视图-控制器(MVC)架构的Java Web框架,由Apache软件基金会维护。这个视频教程由黑马程序员提供,...通过学习,开发者不仅能掌握Struts2.1的使用,还能了解其背后的MVC设计模式和最佳实践。
这个课程资源来自知名的教育机构“传智播客”的黑马程序员项目,它为想要深入理解Web开发技术的学生提供了一套全面的教程。以下是对这个压缩包中可能包含的知识点的详细解释: 1. **Java基础**:首先,你需要对Java...
在编程领域,代码生成器通常基于某种规则或模式来工作,这些规则可能是基于设计模式,也可能是根据数据库表结构自动创建ORM(对象关系映射)代码。例如,如果你有一个数据库表,代码生成器可以自动为你创建与之对应...
- 学习Action类的设计模式,了解拦截器、配置文件等组件的作用。 - 实现基于Struts2的用户登录注册系统。 #### 6. 3G手机Android应用开发—核心基础 - **知识点概述**:此部分涵盖了Android开发的基础知识,适合...
### 黑马程序员入学Java精华总结 #### 一、Java概述与基础知识 1. **何为编程?** - 编程是指通过编写计算机能够理解的指令来解决问题或完成特定任务的过程。这些指令通常被组织成算法,并使用某种编程语言实现。...
这些笔记和示例代码将涵盖以上所有模式的详细解释,以及在Java中的具体实现,对于理解设计模式及其在实际开发中的应用具有极大帮助。通过学习这些笔记,开发者可以提升自己的编程思维,更好地组织和优化代码,使得...
《黑马扫地僧C/C++\数据结构\算法\设计模式讲义》是一份全面且深入的编程学习资源,特别适合那些希望通过自学提升C/C++技能的开发者。这份讲义结合了理论与实践,旨在帮助读者掌握编程语言的基础,深化对数据结构的...
总结起来,"黑马程序员Struts2人员管理系统"项目涵盖了Struts2框架的基础知识,包括MVC模式的理解、Action的编写、拦截器的使用、数据库操作、JSP页面设计等。通过实际操作,开发者不仅可以提升技能,还能更好地理解...
通过《黑马程序员匠心之作 C++教程_第2阶段实战-通讯录管理讲义》,学习者不仅可以深入理解C++语言基础,还能在实践中锻炼解决问题的能力,为未来更复杂的编程项目打下坚实基础。无论是对于个人兴趣还是职业发展,这...
"黑马程序员 shh框架-crm项目源码" 是一个基于SSH(Spring、Struts、Hibernate)框架开发的客户关系管理(CRM)系统的源代码。这个项目旨在帮助学习者理解和掌握SSH框架在实际项目中的应用,同时也为开发者提供了一...
本教程由黑马程序员编著,旨在帮助学习者深入理解并掌握Java Web编程的核心概念和技术。教程覆盖了从基础到进阶的15个章节,每个章节都配备了课后习题,以强化理论知识并提升实践能力。 1. **Servlet与JSP**:Java ...
【标题】"Pinyougou_html_css_黑马程序员_" 指的是一个关于HTML和CSS的实战项目,这个项目可能是由“黑马程序员”这个知名的在线教育平台提供的。"品优购"可能是该项目的一个虚构的电商网站名称,目的是为了让学生...
在"黑马程序员SSM框架jar整合"这个资源中,很可能包含了已经配置好SSM框架的jar包,方便初学者直接导入项目,快速搭建SSM开发环境。这些预打包的jar包可以帮助开发者省去配置和整合的繁琐步骤,更专注于业务逻辑的...
《Java EE企业级应用开发教程(Spring Spring MVC MyBatis)》是一本专注于Java企业级应用开发的专业教程,由黑马程序员编著。本书的核心在于深入浅出地介绍如何使用Java EE技术栈,特别是Spring、Spring MVC和...
7. **设计模式**:常见的设计模式如单例、工厂、观察者、装饰者、适配器、代理等,面试中常用来考察你的代码设计能力。 8. **JVM**:了解内存模型(堆、栈、方法区、本地方法栈),垃圾回收机制(GC),类加载机制...
6. **MVC设计模式**:为了更好地组织项目结构,本教程详细阐述了Model-View-Controller(MVC)模式的原理及其在JavaWeb开发中的应用。并以Spring MVC框架为例,展示了基于MVC架构的应用构建过程。 7. **安全机制**:...