黑马程序员——Java中的设计模式

------- android培训java培训、期待与您交流!
----------

Java中有23种设计模式

按照目的来分,设计模式可以分为创建型模式、结构型模式和行为型模式。

创建型模式用来处理对象的创建过程;结构型模式用来处理类或者对象的组合;行为型模式用来对类或对象怎样交互和怎样分配职责进行描述。

创建型模式用来处理对象的创建过程,主要包含以下5种设计模式:

 工厂方法模式(Factory Method Pattern)

 抽象工厂模式(Abstract Factory Pattern)

 建造者模式(Builder Pattern)

 原型模式(Prototype Pattern)

 单例模式(Singleton Pattern)

结构型模式用来处理类或者对象的组合,主要包含以下7种设计模式:

 适配器模式(Adapter Pattern)

 桥接模式(Bridge Pattern)

 组合模式(Composite Pattern)

 装饰者模式(Decorator Pattern)

 外观模式(Facade Pattern)

 享元模式(Flyweight Pattern)

 代理模式(Proxy Pattern)

行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下11种设计模式:

 责任链模式(Chain of Responsibility Pattern)

 命令模式(Command Pattern)

 解释器模式(Interpreter Pattern)

 迭代器模式(Iterator Pattern)

 中介者模式(Mediator Pattern)

 备忘录模式(Memento Pattern)

 观察者模式(Observer Pattern)

 状态模式(State Pattern)

 策略模式(Strategy Pattern)

 模板方法模式(Template Method Pattern)

 访问者模式(Visitor Pattern)

在学习中主要学习了两种设计模式:模板方法设计模式  和   享元设计模式  单例设计模式

享元设计模式(Flyweight):

 

有很多个小的对象,它们有很多的属性相同,把它们变成一个对象,哪些不同的属性,把它们变成方法的参数,这些不同的属性成为外蕴状态(External State)

那些相同的属性成为内蕴状态(Internal State)

 

概念:也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。比如说一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象。如果有一个1M的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了。那么如果要是每个字母都共享一个对象,那么就大大节约了资源。

Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度.应用场合很多。

享元设计模式优点:减少对象数量,节省内存空间

享元设计模式缺点:维护共享对象,需要额外的开销(用一个线程来维护垃圾回收)

模板方法设计模式:

解决的问题:当功能内部一部分实现时确定,一部分实现是不确定的。这时可以把不确定的部分暴露出去,让子类去实现。

abstract class GetTime{

public final void getTime(){//此功能如果不需要复写,可加final限定

long start = System.currentTimeMillis();

long end = System.currentTimeMillis();

System.out.println("毫秒是:"+(end-start));

}

public abstract void code(); //抽象不确定的功能,让子类复写实现

}

class SubDemo extends GetTime{

public void code(){//子类复写功能方法

for(int y=0; y<1000; y++){

System.out.println("y");

}

}

}

什么是模版方法呢?

在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去完成。

单例设计模式:

 

设计模式:解决某一类问题最有效的方法

Java中有23中设计模式

解决的问题:保证一个类在内存中的对象唯一性。

比如:多程序读取一个配置文件时,建议配置文件封装成对象。会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,就需要该配置文件对象在内存中是唯一的。

Runtime()方法就是单例设计模式进行设计的。

如何保证对象唯一性呢?

思想:

1,不让其他程序创建该类对象。

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

3,对外提供方法,让其他程序获取这个对象。

步骤:

1,因为创建对象都需要构造函数初始化,只要将本类中的构造函数私有化,其他程序就无法再创建该类对象;

2,就在类中创建一个本类的对象;

3,定义一个方法,返回该对象,让其他程序可以通过方法就得到本类对象。(作用:可控)

代码体现:

1,私有化构造函数;

2,创建私有并静态的本类对象;

3,定义公有并静态的方法,返回该对象。

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

//饿汉式

class Single{

private Single(){} //私有化构造函数。

private static Single s = new Single(); //创建私有并静态的本类对象。

public static Single getInstance(){ //定义公有并静态的方法,返回该对象。

return s;

}

}

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

//懒汉式:延迟加载方式。

class Single2{

private Single2(){}

private static Single2 s = null;

public static Single2 getInstance(){

if(s==null)

s = new Single2();

return s;

}

}

对于事物该怎么描述,还怎么描述

当需要将该事物的对象保证在内存中唯一时,就将以上的单例设计模式的代码实现的三步加上即可

主函数中怎么调用加入单例设计模式的类?

Student ss=Student.getIntance();//调用单例设计模式类对外提供的公共方法

饿汉式:是Single类一进入对象,就已经创建好了对象了

懒汉式:Single类进入内存,对象还没有存在,只有调用了getInstance方法时,才建立对象

------- android培训java培训、期待与您交流!
----------

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-11 03:35:17

黑马程序员——Java中的设计模式的相关文章

黑马程序员-java中的反射总结

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- Java 反射总结 类装载器工作机制 类装载器就是寻找类的节码文件并构造出类在JVM 内部表示对象的组件.在Java 中, 类装载器把一个类装入JVM 中,要经过以下步骤: 1.装载:查找和导入Class 文件: 通过一个类的全限定名来获

黑马程序员------Java中jdk1.5新特性

Java培训.Android培训.iOS培训..Net培训.期待与您交流! JDK1.5新特性: 为什么会出现新特性: 新的技术出现是为了解决老的问题,Java语言为了提高开发者的开发效率,对之前的某些不利于提高效率的技术进行改进. 静态导入: 静态导入:可以导入某个类下的静态方法,静态导入后,可以不写类名而直接使用此类下的静态方法. 语法:import static 包名.类名.静态方法 代码示例: package com.itheima.day1; /** * 静态导入 * @author

黑马程序员------Java中多线程学习总结(一)

Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! 一.多线程的概念 进程:是一种“自包容”的运行程序,有自己的地址空间. 基于进程的特点是允许计算机同时运行两个或更多的程序 线程:是进程内部单一的一个顺序控制流 . 基于线程的多任务处理环境中,线程是最小的处理单位. 在Java中,一个应用程序可以包含多个线程.每个线程执行特定的任务,并可与其他线程并发执行.多线程使系统的空转时间减少,提高了CPU的利用率.多线程编程隐藏了CPU在任务之间切换的事实. 二.创建

黑马程序员————java中的网络编程

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- java中的网络编程 一.网络编程概述:基于互联网的编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换. 二.网络模型:OSI和TCP/IP 1.OSI(Open System Interconnection开放系统互连

黑马程序员------Java中GUI(图形用户界面)学习总结

Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! GUI: Graphical User Interface(图形用户接口). 即用图形的方式,来显示计算机操作的界面,以方便用户更容易更直观地操作. Java中为GUI提供的对象都在Java.Awt和Javax.Swing两个包中. java.Awt: Abstract Window ToolKit (抽象窗口工具包). 需要调用本地系统方法实现功能,属于重量级控件. javax.Swing: 在AWT的基础上

黑马程序员-Java中的基本数据类型

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- Java中的数据类型分为两个大类:基本数据类型和引用数据类型. 其中基本数据类型又可以分为四类:整型数据类型,小数数据类型,字符类型,布尔型. 整型数据类型还分为:byte,short,int(整型),long(长整型).默认为int型.

黑马程序员————java中的抽象类

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 抽象类集中的体现了java面向对象的特性,对于每一种事物通过五个方面:属性,方法,构造器,代码块,内部类,来重新解构再进行组装,然后将类似的事物归为一类,这是面向对象的思想.java中常说万物皆对象,那么很显然我们可以进一步的将其中的方法

黑马程序员------Java中多线程学习总结(二)

Java培训.Android培训.iOS培训..Net培训,期待您的交流 在Java多线程中,如果有多个线程同时操作共享数据时,就可能会发生数据异常 如下面这段代码: /* * 模拟卖票 */ class Ticket implements Runnable { private int tick = 10; Object obj = new Object(); public void run() { while(true) { if(tick>0) { try{Thread.sleep(10);

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

----android培训.java培训.期待与您交流! ---- 通过一段时间的学习,对于面向对象有了更深刻的了解,面向对象是将复杂的事情简单化,面向对象的思想更能全面详细的想到问题的关键,下面是对面向对象的一些总结: 面向对象:将功能封装进对象,强调具备了功能的对象 特点: 1:将复杂的事情简单化.                2:面向对象将以前的过程中的执行者,变成了指挥者.                3:面向对象这种思想是符合现在人们思考习惯的一种思想. 面向过程是执行者   ,