----------- android培训、java培训、java学习型技术博客、期待与您交流! ---------
设计模式:
通过很多东西抽取出来的一个模型。
创建型:创建对象。工厂模式,单例模式。
结构型:对象间的关系。装饰模式。
行为型:对象能够做什么。模板模式。
工厂模式:
比如说,我们现在有很多动物类,猫,狗,猪...
而这些动物有相同的行为,eat()。
抽取一个共同的父类。动物。
简单工厂模式:
Animal
|--Dog
|--Cat
AnimalFactory
public static Animal createAnimal(String type){
if("dog".equals(type)){
return new Dog();
}else if("cat".equals(type)){
return new Cat();
}else {
return null;
}
}
工厂方法模式:
Animal
|--Dog
|--Cat
|--Pig
AnimalFactory
|--DogFactory
|--CatFactory
|--PigFactory
单例模式:
就是指类在内存中只能有一个对象。
举例:windows的打印服务,网站计数器
应用:线程池,数据库连接池
面试题:请写出一个单例设计模式。
分析:
类在内存中只能有一个对象。
A:外界不能够随意创建对象。
把构造方法私有
B:类本身要创建一个对象。
C:通过公共的方式提供给别人。
单例模式分类:
饿汉式:类加载就创建对象(开发用)
public class Student {
// 把构造方法私有,是为了不让外界随意创建
private Student() {
}
private static Student s = new Student();
// 提供公共的方式让别人使用
// 为了让外界能够直接通过类名访问该方法,需要对该方法加静态
public static Student getStudent() {
return s;
}
public void show() {
System.out.println("hello");
}
}
懒汉式:
public class Teacher {
private Teacher() {
}
private static Teacher t = null;
public synchronized static Teacher getTeacher() {
if (t == null) {
t = new Teacher();
}
return t;
}
public void show() {
System.out.println("world");
}
}
什么时候用,就什么时候创建。
为什么?
A:延迟加载。
B:线程安全问题。怎么解决呢?
装饰模式:对类原有的功能进行了修饰或者扩充。
我们都有手机,手机具备打电话的功能。
按照正常做法,我们应该把手机类给设计出来,并给出一个打电话功能。Phone.java
随着发展,人的需求也是在变化的,假设我现在需要在打电话前听到彩铃,而这种需求是部分人需要的,那么,现在我们该怎么办呢?
回想我们曾经学过继承,通过继承就可以具备父亲的打电话功能,我还可以在新的手机上添加彩铃功能。ColorPhone.java
继续发展,人的需求又发生改变了,我想在打完电话后,可以播放广告。GuangGaoPhone.java
需求继续改变,我想要先有彩铃,接着打电话,最后放广告。
A:继承ColorPhone
B:继承Phone,然后自己实现彩铃,父亲的打电话,自己实现广告
需求还是可以继续发生改变的,使用继承可以解决问题,但是,将来一旦某个父亲发生了改变,依赖这个父亲的子类都会发生改变。
所以,这种解决方案可以,但是不好。
Phone
|--ColorPhone
|--ColorGuangGaoPhone
|--...
|--GuangGaoPhone
|--...
既然不好,那么, 在开发的过程中,就会有相应的东西来替代它。
这种东西就叫:设计模式。
而我们讲解的这种模式:装饰设计模式。
A:被装饰的抽象事物 Phone
B:具体的事物 PhoneImpl
实现Phone接口,具体实现类
C:装饰类 PhoneDecorate
实现Phone接口,调用实现。
private Phone phone;
public PhoneDecorate(Phone phone) {
this.phone = phone;
}
@Override
public void call() {
this.phone.call(); // 具体的手机打电话功能
}
要有彩铃:
具有彩铃功能的装饰类
要有广告:
具有广告功能的装饰类
要有先彩铃,接着电话,最后广告功能。
...
Phone(接口)
|--PhoneImpl(具体实现类)
|--PhoneDecorate(抽象类)
|--ColorPhoneDecorate(具体装饰类)
|--GuangGaoPhoneDecorate(具体装饰类)
模板模式:
我需要打印一篇文章,这篇文章:
头,中间,尾组成。
Print
print(){
printHead();
printBody();
printBottom();
}
printHead(){}
printBody(){}
printBottom(){}
这样做的话,我们就得把打印操作给固定了,固定后如果有新的变化,发现不好。
怎么办呢?我们就采用一种设计模式解决:模板模式。
模板类:(抽象类)
打印模板类:
打印方法:具体的。
三个抽象方法。
----------- android培训、java培训、java学习型技术博客、期待与您交流! ---------
设计模式:
通过很多东西抽取出来的一个模型。
创建型:创建对象。工厂模式,单例模式。
结构型:对象间的关系。装饰模式。
行为型:对象能够做什么。模板模式。
工厂模式:
比如说,我们现在有很多动物类,猫,狗,猪...
而这些动物有相同的行为,eat()。
抽取一个共同的父类。动物。
简单工厂模式:
Animal
|--Dog
|--Cat
AnimalFactory
public static Animal createAnimal(String type){
if("dog".equals(type)){
return new Dog();
}else if("cat".equals(type)){
return new Cat();
}else {
return null;
}
}
工厂方法模式:
Animal
|--Dog
|--Cat
|--Pig
AnimalFactory
|--DogFactory
|--CatFactory
|--PigFactory
单例模式:
就是指类在内存中只能有一个对象。
举例:windows的打印服务,网站计数器
应用:线程池,数据库连接池
面试题:请写出一个单例设计模式。
分析:
类在内存中只能有一个对象。
A:外界不能够随意创建对象。
把构造方法私有
B:类本身要创建一个对象。
C:通过公共的方式提供给别人。
单例模式分类:
饿汉式:类加载就创建对象(开发用)
public class Student {
// 把构造方法私有,是为了不让外界随意创建
private Student() {
}
private static Student s = new Student();
// 提供公共的方式让别人使用
// 为了让外界能够直接通过类名访问该方法,需要对该方法加静态
public static Student getStudent() {
return s;
}
public void show() {
System.out.println("hello");
}
}
懒汉式:
public class Teacher {
private Teacher() {
}
private static Teacher t = null;
public synchronized static Teacher getTeacher() {
if (t == null) {
t = new Teacher();
}
return t;
}
public void show() {
System.out.println("world");
}
}
什么时候用,就什么时候创建。
为什么?
A:延迟加载。
B:线程安全问题。怎么解决呢?
装饰模式:对类原有的功能进行了修饰或者扩充。
我们都有手机,手机具备打电话的功能。
按照正常做法,我们应该把手机类给设计出来,并给出一个打电话功能。Phone.java
随着发展,人的需求也是在变化的,假设我现在需要在打电话前听到彩铃,而这种需求是部分人需要的,那么,现在我们该怎么办呢?
回想我们曾经学过继承,通过继承就可以具备父亲的打电话功能,我还可以在新的手机上添加彩铃功能。ColorPhone.java
继续发展,人的需求又发生改变了,我想在打完电话后,可以播放广告。GuangGaoPhone.java
需求继续改变,我想要先有彩铃,接着打电话,最后放广告。
A:继承ColorPhone
B:继承Phone,然后自己实现彩铃,父亲的打电话,自己实现广告
需求还是可以继续发生改变的,使用继承可以解决问题,但是,将来一旦某个父亲发生了改变,依赖这个父亲的子类都会发生改变。
所以,这种解决方案可以,但是不好。
Phone
|--ColorPhone
|--ColorGuangGaoPhone
|--...
|--GuangGaoPhone
|--...
既然不好,那么, 在开发的过程中,就会有相应的东西来替代它。
这种东西就叫:设计模式。
而我们讲解的这种模式:装饰设计模式。
A:被装饰的抽象事物 Phone
B:具体的事物 PhoneImpl
实现Phone接口,具体实现类
C:装饰类 PhoneDecorate
实现Phone接口,调用实现。
private Phone phone;
public PhoneDecorate(Phone phone) {
this.phone = phone;
}
@Override
public void call() {
this.phone.call(); // 具体的手机打电话功能
}
要有彩铃:
具有彩铃功能的装饰类
要有广告:
具有广告功能的装饰类
要有先彩铃,接着电话,最后广告功能。
...
Phone(接口)
|--PhoneImpl(具体实现类)
|--PhoneDecorate(抽象类)
|--ColorPhoneDecorate(具体装饰类)
|--GuangGaoPhoneDecorate(具体装饰类)
模板模式:
我需要打印一篇文章,这篇文章:
头,中间,尾组成。
print(){
printHead();
printBody();
printBottom();
}
printHead(){}
printBody(){}
printBottom(){}
这样做的话,我们就得把打印操作给固定了,固定后如果有新的变化,发现不好。
怎么办呢?我们就采用一种设计模式解决:模板模式。
模板类:(抽象类)
打印模板类:
打印方法:具体的。
三个抽象方法。
----------- android培训、java培训、java学习型技术博客、期待与您交流! ---------
发表评论
-
日志地址
2015-05-04 20:19 243iteye博客 qq空间 -
黑马程序员_正则表达式
2015-05-04 10:56 559[b][/b]----------- android培 ... -
黑马程序员_IO
2015-05-04 10:53 367----------- android培训、jav ... -
黑马程序员_Map集合
2015-05-03 09:53 422----------- android培训、jav ... -
黑马程序员_Collection集合
2015-05-03 09:49 310----------- android培训、java培训、ja ... -
黑马程序员_异常
2015-05-03 09:38 305----------- android培训、java培训、ja ... -
黑马程序员_常用类库
2015-05-03 09:30 544----------- android培训、java培训、ja ... -
黑马程序员_网络编程
2015-05-03 09:56 482----------- android培训、jav ... -
黑马程序员_多线程
2015-05-02 20:28 351----------- android培训、java培训、ja ... -
黑马程序员_内部类
2015-05-02 20:24 396----------- android培训、java培训、ja ... -
黑马程序员_面向对象(三)
2015-05-02 20:22 359----------- android培训、jav ... -
黑马程序员_面向对象(二)
2015-05-02 20:18 320----------- android培训、jav ... -
黑马程序员_面向对象(一)
2015-05-02 17:55 440------------ android培训、ja ...
相关推荐
根据《JAVA与设计模式》整理的笔记及示例代码。
内容概要:通过带着读者手写简化版 Spring 框架了解 Spring 核心原理。在手写Spring源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程保留核心功能, ...本代码基于黑马程序员的课程,最好根据课程同步学习
Finix原创的设计模式笔记。
|--Menu之不同模式下显示不同菜单 |--openGL-ES上绘制文字 |--openGL-ES纹理贴图 |--openGL-ES获取帧率 |--openGL-ES雾化 |--PopupWindow的使用 |--PopupWindow的返回健关闭 |--RadioGroup的用法(里面的成员可以是...
C/C++自学提高神器,很多网站只有视频,没有讲义,这是最全面,最新的讲义,配合视频,更有利于提升
基于javaEE与MVC模式,图书馆管理系统,数据库为sql2000,有数据库备份文件,服务器为tomcat,用连接池连接方式。(有简要的小文档)
日本资-深技术作家、《程序员的数学》作者结城浩执笔,264张图表(UML类图、时序图、Timethreads图等)穿插文中,通过类比手法和浅显的语言,逐一讲解与多线程和并发处理相关的12种设计模式。每章附带练习题和答案,...
精选12种与多线程和并发处理相关的设计模式 264张图表 + 300段Java示例程序 = 轻松学习多线程编程 日本经典多线程入门书,原版长销11年! 本书适合以下读者阅读 a.对多线程感兴趣的人 b.对Java编程感兴趣的人 c.对...
3、举例说明using关键字有哪些主要用途。 【解答】 在C#中,using关键字有3个用途 1)指定引用的命名空间,例如:using System.Windows.Forms; 2)简化命名空间的层次表达形式,例如:using WinForm=System.Windows....
一、什么是装饰设计模式 当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能,那么自定义的类成为装饰类。 装饰类通常会通过构造方法,传递进来一个需要装饰的...
2014/12/26 星期五 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例 2014/12/27 星期六 编码实战演练(指导老师:) 2014/12/28 星期日 mysql数据库 2014/12/29 星期一 2014/12/30 星期二 jdbc 2014/12/31...
java 设计模式 免费 视频课程 更详细课程大纲入口:https://edu.csdn.net/course/detail/23462 详细课程直接播放地址:https://edu.csdn.net/course/play/23462
这本书的pdf文件有162M,是最新版高清的pdf,网上原书售价60多元,这里提供的附件是百度云的链接地址。
模型驱动软件开发模式(下) ...在“Zemindar”项目中,本文作者之一运用DSL实现了在运行期间终端用户的复杂算法和统计函数的设计。在这个例子中,DSL不必发明创造,并且第三方的现货供应的Java电子表格组件被...
定义:框架是一堆包含了常量、方法和类等代码的集合,它是一个半成品的应用,只包含了一些项目开发的时候所使用的底层架构,并不包含业务逻辑,框架还包含了一些优秀设计模式,如单例模式、工厂模式、AR(Active ...
黑马程序员49期 java源码揭开所有反模式的神秘面纱 架构师是在大多数关键技术方面拥有丰富经验的抽象主义者。 我删除了重复项并使用备用名称再次对它们进行分类。 可能其中一些在,但别担心,我们稍后会调查它们。 ...
一. Java基础部分 二. 算法与编程 四. Java web部分 五. 数据库部分 六. XML部分 七....八. 软件工程与设计模式 九. j2ee部分 十. EBJ部分 十一. webservice部分 十二. Linux 十三.问得稀里糊涂的题
#include<iostream> using namespace std; class zhuchuan { ... cout模式串在主串中出现次数为"; cout替换后的模式串为"; for(i=0;i;i++) cout[i];cout; return 0; }
Java源码包100个设计实例, 大量 实例,可以作为你的学习设计参考。 实例如下: Applet钢琴模拟程序java源码 Calendar万年历 copass源代码.rar DataBuffer在Java中使用ADO.NET.rar EJB 模拟银行ATM流程及操作源代码 ...
12.1 模式和无模式对话框 217 12.1.1 模式对话框 217 12.1.2 无模式对话框 218 12.2 对话框的MFC实现 219 12.2.1 CDialog的设计和实现 219 12.2.1.1 CDialog的成员变量 219 12.2.1.2 CDialog的成员函数: 219 12.2.2...