黑马程序员———基础视频中涉及的几个设计模式

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

package o_oriented;

/*

设计模式:

解决某一问题最行之有效的方法。java中有23种设计模式。

单例设计模式:

解决一个类在内存只存在一个对象。

思路:

1.为了避免其他程序过多的建立该类对象,先禁止其他程序访问该类对象。

2.但又为了其他程序访问到该类对象,则在该类中自定义一个对象。

3.对外提供一个方法,可以访问该类对象。

步骤:

     1.构造函数私有化。

     2.在类中创建一个本类对象。

     3.创建一个公有方法,获取该类对象。

注意:对于事物,该怎么描述怎么描述,该创建变量则创建变量,该创建功能则创建功能。

当需要保证该类对象在内存中具有唯一性时,则可以使用单例设计模式。

例如:配置文件。

修改配置文件中的参数,修改多次也好,也是修改一个对象的值。

*/

public class SingleDemo {

public static void main(String[] args)

{

Single ss = Single. getInstance();

ss. setCountry( "China");

Single ss1 = Single. getInstance();

System. out.println (ss1 .getCountry ());

}

}

class Single

{

private String country;

public String getCountry()
{

return country ;

}

public void setCountry (String country )
{

this.country = country ;

}

private Single(){

}

private static Single s = new Single();

public static Single getInstance()

{

return s ;

}

}

====================================================================================================

package o_oriented;

/*

饿汉式:

class Single {

private Single(){}

private static Single s = new Single();

public static Single getInstance() {

return s;

}

这个先初始化对象。

Single类一进内存,就已经创建好了对象。

注意:在开发时,用饿汉式。懒汉式在面试当中比较常见,通过结合多线程来解释。

*/

public class SingleDemo2 {

public static void main(String[] args)

{

}

}

/*

懒汉式:

对象是方法被调用时,才初始化,也叫做对象的延时加载。

Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。双重判断机制

*/

class Single {

private Single(){}

private static Single s = null;

public static Single getInstance()
{

ifs == null)

{

synchronized(Single .class)

{

ifs == null)

s = new Single();

}

}

return s ;

}

}

====================================================================================================

模板方法设计模式:

package o_oriented2;

/*

模板方法设计模式

需求:获取一段程序运行的时间。

原理:获取程序开始和结束的时间并相减即可。

获取时间方法:System.currentTimeMillis();

当代码完成优化后,就可以解决这类问题了。

这种方式,称为模板方法设计模式

什么是模板方法?

在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,

     那么这时就将不确定的部分暴漏出去,由该类的子类去完成

保证获取功能唯一,不被复写,用final

*/

public class TemplateDemo

{

public static void main(String[] args)

{

SubTime sb = new SubTime();

sb. getTime();

}

}

abstract class GetTime

{

public final void getTime()

{

long start = System .currentTimeMillis();

runCode();

long end = System .currentTimeMillis();

System. out.println ("time:
" +(end - start ));

}

public abstract void runCode();

}

class SubTime extends GetTime

{

public void runCode ()

{

forint x = 0; x< 4000; x++)

{

System. out.println (x );

}

}

}

====================================================================================================

package cn.itcast.IO2;

/*

装饰设计模式:

当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。

那么自定义的该类称为装饰类。

装饰类通常会通过构造方法接收被装饰的对象。并基于被装饰的对象的功能,提供更强的功能。

*/

//普通类

class Person

{

public void eat ()

{

System. out.println ("吃饭" );

}

}

//装饰类,增强Person类的功能。

class SuperPerson

{

private Person p;

SuperPerson( Person p)

{

this.p = p;

}

public void superEat ()

{

System. out.println ("开胃酒" );

p. eat();

System. out.println ("甜点/餐后水果" );

}

}

public class PersonDemo {

public static void main(String[] args)
{

Person p = new Person();

SuperPerson sp = new SuperPerson( p);

sp. superEat();

}

}

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

时间: 2024-10-12 12:35:13

黑马程序员———基础视频中涉及的几个设计模式的相关文章

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

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

黑马程序员-基础加强-泛型

Java泛型(generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter).声明的类型参数在使用时用具体的类型来替换. 这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引入泛型的好处是安全简单. 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的"任意化","任意化"带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者

黑马程序员_Objective C中的@property 与 @synthesize 快速生成setter getter方法

<a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>.<a href="http://www.itheima.com"target="blank">.Net培训</a>.期待与您交流! 一般来说在一个类中 成员变量是会有setter 跟getter方法的. 如果每一个成员变量的setter 跟gett

黑马程序员_ JAVA中的多线程

尽管线程对象的常用方法可以通过API文档来了解,但是有很多方法仅仅从API说明是无法详细了解的. 本来打算用一节的篇幅来把线程方法中一些重要的知识说完,但这样下来估计要很常的篇幅,可能要用好几节才能说把和线程方法相关的一些重要的知识说完. 首先我们接基础篇(二)来说明start()方法. 一个线程对象生成后,如果要产生一个执行的线程,就一定要调用它的start()方法.在介绍这个方法时不得不同时说明run方法.其实线程对 象的run方法完全是一个接口回调方法,它是你这个线程对象要完成的具体逻辑.

黑马程序员【Java中的面向对象】

Java中的面向对象 在软件开发的学习中, 我最先接触的开发语言就是java,但都是简单的函数和循环数组的应用.说道面向对象,第一次看到这个词的时候还是在C#的学习过程中,我记得当时PPT上霸气的解释,什么是对象?万物皆对象!够霸气吧,当时的面向对象思想对我来说还是挺崩溃的,什么继承多态啊!经过了无数的联系项目的书写,终于对面向对象有了一定的理解,现在刚好在java的学习中再度重温面向对象,那么就将我眼中的面向对象写出来分享给大家. 说到面向对象,我们就不得不提一下他的三大特性,继承封装和多态.

黑马程序员-基础部分

基础知识 1.什么是跨平台性?原理是什么?JVM 不同的系统都可以运行.系统安装虚拟机.. 我的总结:Java 程序之所以能够实现跨平台运行,是因为它根本就不直接在任何底层 平台上运行,有虚拟机调用. 2.Jre 和Jdk 的区别? JDK;包含虚拟机和类库,也包含JRE JRE:(Java Runtime Environment),java 运行环境 简单而言:使用JDK 开发完成的java 程序,交给JRE 去运行. 3.java 虚拟机JVM Java Virtual Machine ,简

黑马程序员【java中的反射机制】

Java中的反射机制 ------- android培训.java培训.期待与您交流! ---------- java的反射机制是java的特性之一,反射机制是构建框架技术的基础所在,使用反射可以使程序更加灵活,避免将程序写死在代码里.相对于很多初学者只接触过java基础的人,反射还是一个很朦胧难懂的概念,下面我们就来说一下反射的一些应用. java反射机制是指在运行状态中,动态获取信息以及动态调用对象方法的功能.java反射有3个动态性质:1.运行时生成对象实例,2.运行期间调用发放,3.运行

黑马程序员--C语言中的指针(3)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 指向多维数组的指针变量 本小节以二维数组为例介绍多维数组的指针变量. 一.多维数组地址的表示方法 设有整型二维数组a[3][4]如下: 0 1 2 3 4 5 6 7 8 9 10 11  设数组a的首地址为1000,各下标变量的首地址及其值如图所示.在第四章中介绍过, C语言允许把一个二维数组分解为多个一维数组来处理.因此数组a可分解为三个一维数组,即a[0],a[1],a[2].每一个一维

黑马程序员--C语言中的结构体

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 结构(struct)      结构是由基本数据类型构成的.并用一个标识符来命名的各种变量的组合.  结构中可以使用不同的数据类型.      1. 结构说明和结构变量定义      在Turbo C中, 结构也是一种数据类型, 可以使用结构变量, 因此,  象其它  类型的变量一样, 在使用结构变量时要先对其定义.      定义结构变量的一般格式为:       struct 结构名