`
annan211
  • 浏览: 461072 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java 常用设计模式 浅析

 
阅读更多
[color=green]
                         设计模式篇

  大多数书籍谈到设计模式,理论偏多,实践偏少,或者杂七陈八表述不清,或者
夹杂冗余,导致读者混乱。本文力争精简,快速掌握。采用编程语言-Java。
	
  1 设计模式之-- 简单工厂模式
    简介:根据传入不同的参数,工厂类或工厂方法就实例化出合适的对象(但不关心具体的实例化过程),返回结果。
    生活实例:活字印刷术(根据文字的不同,采用不同的文字得到不同的刻板,但不关心过程)   计算器(根据不同的运算符调用不同的计算方法,但不关心计算过程)

  2 设计模式之-- 策略模式
    简介:定义一组算法操作并分别封装,所有的算法完成的都是相同的工作,只是实现的方式不同,算法之间可以互相替换,用到谁时调用谁()。
    生活实例:我去买包子,不但关心买包子这一个动作,我还要具体到包子的选材,和面,切料,包包子,蒸包子这一系列的算法里面

  注:此时会感觉工厂模式和策略模式差不多,实际上还是有区别的,可以把简单工厂模式理解为黑盒,把策略模式理解为白盒,
   买包子这一动作,工厂模式来说,并不关心制作包子的过程,只关心拿到包子这一结果。而策略模式不但关心买包子,而且还关心包子一系列的制作过程。

 3 设置模式之--单一职责模式
   简介:这个不做过多说明,即开发业务复杂时,尽可能让模块专心完成某一项功能。

 4 设计模式之--开放-封闭模式
   简介:软件实体(类 模块 函数等)可以扩展但不可以修改
   生活实例:员工上班迟到这一事例中,员工上班并且保证8小时工作是不允许修改的,但是因为员工家庭情况的特殊性,可以扩展每个员工的上下班时间,、
             早到早下班,晚到晚下班,销售人员则可以扩展为不限定上下班时间,完成额度即可。

 5 设计模式之--依赖倒转原则
   简介:高层模块不应依赖低层模块,抽象不应依赖细节,所有都应依赖抽象。
   生活实例:电脑主板  cpu 音响,内存等是不允许互相依赖的,他们只针对抽象依赖。比如内存条坏了,只需要换一根内存就可以了,无需整块主板都换掉。
             但是 主板依赖主板的抽象,内存依赖内存的抽象,cpu也依赖cpu的抽象。

 6 设计模式之--代理模式
   简介:让真正的实体和代理实体实现同一接口,完成工作。
   应用场景:代理模式分为远程代理、虚拟代理、安全代理、智能指引四种
	      远程代理:为一个对象在不同的地址控件提供局部代表。这样可以隐藏一个对象
	                存在于不同地址空间的事实。
	      虚拟代理:根据需要创建开销很大的对象。通过他来存放实例化需要很长时间的真实对象。
	      安全代理:用来控制真是对象访问时的权限。
	      智能指引:是指调用真实的对象时代理处理另外一些事。

 7 设计模式之--装饰器模式
   简介: 为已有功能动态的添加更多功能的一种方式。
   应用场景:需要在主类中新加入一些只有在某种特定场合下才会被执行的特殊行为的操作。装饰器把
	      每个要装饰的功能放在单独的类中,并让这个类包装他所需要装饰的对象,因此当需要执行
	      特殊行为时,客户代码就可以在运行时根据需要有选择的按顺序的使用装饰功能包装对象。
   生活实例:穿衣服。人为主类,衣服为含有人的对象的类,把具体的穿某种衣服的动作包装到单独的类中。在需要的时候,实例化并执行即可。

 8 设计模式之--工厂方法模式
    简介:定义一个工厂接口,再让每一个具体工厂实现该工厂接口
    应用场景:

    工厂方法模式和简单工厂模式的对比:简单工厂将选择实例化哪个对象的判断放在工厂类中,
	让客户端去除了与具体产品的依赖。工厂方法模式将这一判断放在了客户端。
	简单工厂模式 违背了 开放-封闭原则(把选择判断放在工厂类,失去了扩展),而工厂方法模式克服了这一缺点。

 9 设计模式之--原型模式
    简介:主类的克隆 复制。
    应用场景:打印 就是以原型为基准,不断复制产生新的对象。但是此处涉及到复制对象的区别:
	      深复制与浅复制。
	      浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用
		      都仍然指向原来的对象。
	      深复制:深复制则是把引用对象的变量指向父之过的新对象。

	      说明图  复制前 :A  
	              复制后  : 浅复制 复制后 a  仍指向A
				 深复制 复制后 b  不指向A 指向自身。
	      实现深复制的方式多种多样,这里提供一种:
	      // workObject 为被复制对象(即 Resume 属性)
	      public Resume(String name){
		 this.name = name;
		 workObject = new WorkObject();	
	      }
	      public Resume(WorkObject workObject){
			this.workObject = (WorkObject)workObject.clone();
	      }
    生活实例:打印

 10 设计模式之--模板方法模式
     简介:重复的代码都应该上升到父类,而不是让每个子类都去重复。
     应用场景:子类在完成主类的行为时,在某一细节层次一致的一个过程或一系列步骤,但个别步骤在更
               详细的层次上的实现可能不同时,考虑使用模板方法来处理。
 
 11  设计模式之--迪米特法则
     简介:如果两个类之间不需要直接通信,那么这两个类就不应该发生直接的相互作用。如果其中一个雷需要调用另一个类的
           某个方法的话,可以通过第三者转发这个调用。
     应用场景:公司其他部门不需要知道IT部门的具体员工是谁,在电脑出现故障之后,不需要依靠
              个人关系去找IT部门的某个同事修理,而是直接找IT部门主管即可。所以在IT部门同事
	      集体辞职的情况下,仍然可以修理电脑。

 12  设计模式之--外观模式
     简介:为子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
     应用场景:系统设计经典 三层架构,层与层之间可以建立外观模式,
               这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。减少模块之间的依赖时也可使用外观模式。
	       维护老旧系统时,可以开发一个外观类,来提供设计粗糙或高度复杂的遗留代码的比较清晰的简单接口,
	       让新系统与外观类对象交互。


13   设计模式之--建造者模式
     简介:建造者模式 又叫生成器模式。建造者模式将对象的构建(内部的构建通常是稳定的)与表示分离,通过第三者指挥类生成最终具体类。
     应用场景:将一些稳定而复杂的内部构建过程封装成接口Builder,具体建造者ConcreteBuilder实现Builder,构造
               和装配各个部件,指挥者Directer 指挥建造过程。

14   设计模式之--观察者模式
     简介:多个观察者同时监听一个主题,当这个主题状态发生变化时,会通知所有观察者对象,使他们自己更新自己。
     应用场景:1 当一个对象的改变需要同时改变其他对象,而且该对象不知道有多少对象需要改变。2 当抽象模型一方面依赖于另一方面时,使用观察者模式
               独立封装这两方面,实现解耦。

15   设计模式之--抽象工厂模式
      简介:抽象工厂模式是在简单工厂模式基础之上再抽象一层,简单工厂是允许子类去决定实例化哪个实例,抽象工厂是把工厂类也抽象化,
            让子类决定实现哪个工厂并且实例化哪个实例。
      应用场景:设计一套系统,实现CURD,但是必须支持多种数据库。系统分为MVC结构,视图层不关心和哪种数据库交互,控制器决定实例化哪种数据库的
                 对象。数据库对象实现数据库操作类的接口(此处可以理解为抽象工厂),实现解耦。换用不同的数据库时,只需要数据库对象去实现不同数据库操作类
		 的接口即可。

      (抽象工厂的缺陷:)

16   设计模式之--状态模式
     简介:其 核心思想是 当控制一个对象状态转换的条件表达式国语复杂时,把状态的判断逻辑转移到表示不同扎un国泰的一系列类当中
           可以把复杂的判断逻辑简化。
     应用场景:举个例子,当判断分支过多或者过于复杂时,可以把判断结构的每一个分支写成一个个的类,在各个类的内部做简单判断。

17   设计模式之--适配器模式
     简介:适配器模式分为类和对象适配器,主要功能是将两个不适宜直接在一起工作的类或对象通过中间类或对象实现在一起工作的可能。
	   可以简单将其理解为 翻译者。 两个类完成相同或相似的工作,但是接口不同时,适合使用适配器。
     应用场景:笔记本电脑电源适配器。
     注:设计模式并非为了使用而存在,而是为了是代码更具有灵活性和扩展性,更具有艺术美而产生。所以在编码之前,全体队友如果积极约定,、
          善于沟通,很可能并不需要本话题中的适配器模式。 在代码设计之处,遵循"约定优于配置"这一思想,良好沟通,集思广益,达到运用模式于无形,
         这才是设计模式的真正境界。


[/color]
分享到:
评论

相关推荐

    浅析java常用的设计模式.doc

    浅析java常用的设计模式.doc

    Java 观察者模式的浅析

    观察者模式是一种常用的设计模式,主要用于处理对象间的一对多依赖关系。当一个对象(主题)的状态发生变化时,所有依赖于它的对象(观察者)都会收到通知并自动更新。这种模式在软件开发中非常实用,尤其是在需要...

    浅析java常用的设计模式(doc-23页).doc

    Java设计模式是面向对象编程中的一种最佳实践,用于解决常见的设计问题,提高代码的可重用性、可维护性和灵活性。以下是对文档中提到的Java设计模式的详细解析: 1. **工厂模式**:工厂模式是一种创建型设计模式,...

    浅析Java设计模式【2】——适配器

    ### 浅析Java设计模式【2】——适配器 #### 概念解析 适配器模式是一种常用的设计模式,其核心在于“适配”二字,即如何将一个类的接口转换成客户希望的另一个接口。该模式使得原本由于接口不兼容而不能一起工作的...

    浅析java常用的设计模式.docx

    Java设计模式是面向对象编程中的一种最佳实践,用于解决常见的设计问题,提高代码的复用性和可维护性。以下是对给定文件中提及的15种设计模式的详细解析: 1. **工厂模式**:是一种创建型设计模式,提供一个创建...

    Kotlin中单例模式和Java的对比浅析

    单例模式是一种常用的设计模式,在 Java 和 Kotlin 中都有多种实现方式。下面我们将对比 Kotlin 中单例模式和 Java 中单例模式的实现方式。 一、懒人写法(恶汉式) 在 Java 中,懒人写法是最简单的单例模式实现...

    Gallery和GridView浅析

    【Gallery和GridView浅析】 Gallery和GridView是Android开发中用于展示数据的两种控件,它们在界面设计中有着广泛的应用,特别是在图片展示和选择场景下。本文将详细解析这两个控件的特点、用法以及相关属性。 一...

    基于SpringBoot微服务架构下前后端分离的MVVM模型浅析.docx

    微服务架构是一种将单一应用程序分解为一组小型服务的设计模式,每个服务运行在其自己的进程中,服务之间通过API进行通信。SpringBoot是Spring框架的一个简化版本,它提供了快速构建独立运行的Spring应用程序的能力...

    浅析Java的Spring框架中IOC容器容器的应用

    DI是一种设计模式,它允许容器在运行时将依赖关系注入到对象中,而不是由对象自己创建或查找依赖。这样做的好处在于提高了代码的灵活性、可测试性和可维护性。 BeanFactory容器是Spring中最基础的IoC容器,它实现了...

    浅析框架与代码规范.pdf

    ### 浅析框架与代码规范 #### 一、引言 在软件开发过程中,框架与代码规范扮演着至关重要的角色。良好的框架可以帮助开发者快速构建稳定可靠的应用程序,而严格的代码规范则确保了代码的可读性和可维护性,进而...

    postgresql和struts

    【Struts】是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它简化了构建交互式、响应式的Web应用。下面是Struts相关的知识点: 1. **工作原理**:“Struts1工作原理浅析.doc”深入讲解了Struts1...

    Struts2轻松入门,合适入门的朋友。

    Struts2是一个流行的Java Web应用程序框架,它简化了MVC(Model-View-Controller)设计模式的应用,并且易于扩展和集成其他技术。 ### Struts2入门 #### 1.1 环境搭建 在开始学习Struts2之前,首先需要准备以下...

    软件开发毕业论文题目汇编.docx

    50. 工厂方法模式在软件开发中的应用:探讨工厂模式在软件设计中的应用策略。 这些论文题目反映了软件开发领域的广泛性和多样性,涵盖了从基础理论到具体应用的各个层面,为学生提供了丰富的研究方向。通过深入研究...

    struts2入门教程

    - **常用标签**:列出并解释常用的Struts2标签,如、等。 - **高级标签**:介绍一些高级标签的使用方法,如用于循环遍历集合。 #### 九、表达式OGNL - **OGNL概述**:简述OGNL(Object-Graph Navigation Language)...

    Struts2入门教程。包括jquery集成等。入门必看

    - **设计理念**:采用MVC(Model-View-Controller)架构模式,将业务逻辑、用户界面和控制流程分离,便于维护和扩展。 - **优势**: - 易于集成:支持多种技术栈,如Spring、Hibernate等。 - 强大的插件体系:通过...

    网络第一份struts2.0学习文档

    #### 七、探讨IOC模式 - **IOC(Inversion of Control)**: - 控制反转的概念:将对象创建和依赖注入的过程从代码中分离出来。 - Struts2如何支持IOC:通过配置文件指定依赖关系。 #### 八、Struts2标签 - **...

    python 2019毕业论文参考文献.docx

    - **知识点概述**:王常衡等人的文章《浅析Python语言及其应用前景》(2019)探讨了Python作为一种流行的编程语言,在不同领域的应用潜力和发展趋势。 - **详细内容**:文章分析了Python语言的基本特性和优势,如...

Global site tag (gtag.js) - Google Analytics