二十九、黑马程序员---设计模式

-----Java培训、Android培训、iOS培训、.Net培训、期待与您交流!

模式设计(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。本文将介绍几种简单的设计模式。

单例设计模式:

解决一个类在内存中只有一个对象,多个程序使用统一配置信息对象时,需要保证该对对象的唯一性。

保证对象唯一性的实现步骤:

1.将构造函数私有化:为了避免其他程序过多建立该对象,禁止其他程序调用该对象。

2.在类中创建一个本类对象:为了让其他程序可以访问该类对象

3.提供一个方法可以获取到该对象的方法:方便其他程序访问自定义的本类对象。

饿汉式:

所谓饿汉式就是一进内存 就创建了对象

class single{ 

    private single(){}1.将构造函数私有化 

    private static single s=new single();2.在类中创建一个本类对象 

    public static single getInstance(){3.提供一个方法可以获取到该对象的方法 

        return s; 

    } 

}

调用方式

public class SingleDemo { 

    public static void main(String[] args) {     

        single ss=single.getInstance(); 

    } 

}

懒汉式:

所谓的饿汉式就是什么时候调用什么时候才创建对象,已达到对象的延时加载效果。

class single{ 

    private single(){} 

    private static single s=null; 

    public static single getInstance(){ 

{ 

if (s==null){ 

         s=single.getInstance(); 

} 

} 

        return s; 

    } 

}

两种方式的比较:

饿汉式是比较常用的一种方式,因为它是线程安全的,而懒汉式相对来说使用的较少,因为线程不安全。当然也可以使用同步来保证线程安全

装饰设计模式

顾名思义,所谓的装饰模式就是为了增强一个类的功能,所以在在其他类的基础上进行装饰(包装)。

当想要对已有的独享进行功能增强时,可以定义类,将已有的对象传入,基于已经有的功能,并提供加强功能,那么自定义的该类称为装饰类。装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的功能(在IO流中使用比如BufferedReader等等)。

代码演示:

已知类:

Person() 

{
      public void chifan() 

     {
     }
}

增强类:

superPerson()
{ 

     private Person p; 

   superPerson(Person p) 

  { 

        this.p=p; 

  } 

public void superchifan()
{ 

   p.chifan(); 

   ......... 

}

自定义装饰类

package com.io; 

import java.io.*; 

public class MyBufferedReader { 

        private Reader r;     

    public MyBufferedReader(Reader r) { 

            super(); 

            this.r = r; 

        } 

        //可以一次读取一行的方法 

         public String myReadLine() throws IOException 

         { 

             //定义一个临时容器。StringBulider容器,应用于存储字符数组 

             StringBuilder sb=new StringBuilder(); 

             int ch=0; 

             while((ch=r.read())!=-1){ 

                 if(ch==‘\r‘) 

                         continue; 

                 if(ch==‘\n‘) 

                     return sb.toString(); 

                 else 

                     sb.append((char)ch); 

             } 

             if(sb.length()!=0) 

                 return sb.toString(); 

             return null; 

         }      

         //复写reader中的抽象方法 

         //复写close方法 

         public void close() throws IOException 

         { 

             r.close(); 

         } 

         //复写read方法 

         public int read (char[] c,int off,int len) throws IOException{ 

             return r.read(c, off, len); 

         } 

}

模板设计模式

在我们定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么就把这不确定的部分暴露出去,由该类的子类完成,这方思想就是模板设计模式

示例

abstract class GetTime 

{ 

    public final void getTime(){ 

        long start = System.currentTimeMillis(); 

        runcode(); 

        long end = System.currentTimeMillis(); 

        System.out.print("程序运行时间(毫秒):"+(end-start)); 

    public abstract void runcode(); 

    } 

} 

class SubTime extends GetTime 

{ 

    public void runcode(){ 

        for (int x =0;x<100 ;x++ ) 

        { 

            System.out.println(x); 

        } 

    } 

}

GetTime类中getTime方法时为了获取某个程序运行的时间,因为不知道会运行什么程序,所以把程序封装进一个抽象类中,当我们引用这个方法时,就必须得复写其中的抽象方法runcode,同时继承了getTime这个方法,从而达到检测不同程序运行时间的效果。这就是模板设计模式。

注意:不确定的部分不是非得是抽象的,因为原有类中可能有默认的方法,我们在使用时,只需把它覆盖即可,写我们需要的内容即可。所以,不确定部分,可以是抽象的,也可以不是抽象的。

时间: 2024-11-06 16:09:07

二十九、黑马程序员---设计模式的相关文章

黑马程序员_关于黑马java班入学测试技术分享-后五(二)

??????????????????????????????????????????????????????????????????????????-----Java培训.Android培训.iOS培训..Net培训.期待与您交流! 作为本人首篇黑马技术博客有必要交代一下背景.个人理解博客的用作在于于己在于交流,于他在于学习,在交流学习中共同成长.下面进入正题.本文主要是介绍在做黑马入门测试时的一些问题(这个应该不是泄露题库吧). 本文只要是讲述黑马程序员基础测试题的6-10题,回过头来分析明显

黑马程序员——c语言学习心得——函数传递二维数组

黑马程序员——c语言学习心得——函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.   变量定义的时候给变量初始化,这是保证不出错的一个很好的习惯.尤其是在指针的使用上,如果我们没有给指针初始化,就会出现野指针,该指针的指向并不是我们所希望的,一旦错误的释放了这个指针,就会发生内存的访问.那么如何初始化指针变量呢,一般有以下几种方法:   1.初始化空指针   int* pInteger=N

黑马程序员_09. api-线程及单例设计模式

黑马程序员_api-线程及单例设计模式 a.明确以下概念: 1.进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或叫一个控制单元. 2.线程:就是进程中的一个独立的控制单元.线程在控制着进程的执行,一个进程中至少有一个线程. 3.多线程:如果一个进程中存在着多个控制单元,那么这个进程是一个多线程的应用程序.JVM启动时是一个多线程. b.创建线程的两种方式 1. java已经提供了对线程这类事物的描述.就是Thread类.并且这个类把要运行的代码存放在了run

黑马程序员--单例设计模式

单例设计模式:解决的问题:保证一个类在内存中的对象唯一性.比如:多程序读取一个配置文件时,建议配置文件封装成对象.会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,就需要该配置文件对象在内存中是唯一的. Runtime()方法就是单例设计模式进行设计的. 如何保证对象唯一性呢?思想:1,不让其他程序创建该类对象.2,在本类中创建一个本类对象.3,对外提供方法,让其他程序获取这个对象. 步骤:1,因为创建对象都需要构造函数初始化,只要将本类中的构造函数私有化,其他程序就无法再创建该类

黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合. 2.常见的软件:系统软件:如:DOS,Windows,Linux等.应用软件:如:扫雷,迅雷,QQ等. 3.什么是开发?制作软件. 二.基础知识:人机交互方式 4.软件的出现实现了人与计算机之间的更好的交互. 5.交互方式:图形化界面:这种方式简单直观,使用者易于接受,容易上手操作.命令行方式:

【黑马程序员】————OC特有语法

一.点语法 点语法的本质还是方法调用 p.age = 10; // [p setAge:10]; int a = p.age; // [p age]; 二.成员变量的作用域 @public : 在任何地方都能直接访问对象的成员变量 @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private) @protected : 可以在当前类及其子类的对象方法中直接访问 (@interface中默认就是@protected) @package : 只要处在

黑马程序员——基础加强篇

------- android培训.java培训.期待与您交流! ---------- MyEclipse相关知识 Workspace与project 切换工作空间:File---Switch Workspace---Other 一个工作间包含多个工程,切换工作间之后,会影响里面的工程,例如快捷键什么的都要重新配置如果重新配了之后快捷键还没有用就要考虑下那个快捷键是不是冲突了    视图管理与程序调试 可以通过Window---Show View来添加各种透视图. 调试程序的时候可以在代码右边双

黑马程序员_第一天视频学习

一.      计算机和软件常识 1.      计算机运行原理 1)          硬件基本组成:硬盘.内存.CPU 2)          各个部件之间的运作协调(下图) 2.      计算机只能识别0和1 1)          0和1组成的指令 2)          0和1组成的数据 3.      计算机和软件的联系 1)          软件的基本概念:指令的集合 2)          软件的安装运行过程 3)          为什么要开发软件:写出能控制计算机的指令

黑马程序员-单例模式

单例设计模式 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案.显然单例模式的要点有三个:一是某个类只能有一个实例:二是它必须自行创建这个实例:三是它必须自行向整个系统提供这个实例. 解决的问题:保证一个类在内存中的对象唯一性. 比如:多程序读取一个配置文件时,建议配置文件封装成对象.会方便