`
宁远天意
  • 浏览: 5532 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员_设计模式

阅读更多
----------- 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学习型技术博客、期待与您交流! ---------
分享到:
评论

相关推荐

    根据《JAVA与设计模式》整理的笔记及示例代码

    根据《JAVA与设计模式》整理的笔记及示例代码。

    黑马程序员ssm代码分享

    内容概要:通过带着读者手写简化版 Spring 框架了解 Spring 核心原理。在手写Spring源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程保留核心功能, ...本代码基于黑马程序员的课程,最好根据课程同步学习

    设计模式笔记(精版)

    Finix原创的设计模式笔记。

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--Menu之不同模式下显示不同菜单 |--openGL-ES上绘制文字 |--openGL-ES纹理贴图 |--openGL-ES获取帧率 |--openGL-ES雾化 |--PopupWindow的使用 |--PopupWindow的返回健关闭 |--RadioGroup的用法(里面的成员可以是...

    黑马扫地僧C\C++\数据结构\算法\设计模式讲义.rar

    C/C++自学提高神器,很多网站只有视频,没有讲义,这是最全面,最新的讲义,配合视频,更有利于提升

    JavaEE_MVC图书馆管理系统

    基于javaEE与MVC模式,图书馆管理系统,数据库为sql2000,有数据库备份文件,服务器为tomcat,用连接池连接方式。(有简要的小文档)

    图解java多线程设计模式

    日本资-深技术作家、《程序员的数学》作者结城浩执笔,264张图表(UML类图、时序图、Timethreads图等)穿插文中,通过类比手法和浅显的语言,逐一讲解与多线程和并发处理相关的12种设计模式。每章附带练习题和答案,...

    图解java多线程设计模式2017年8月最新版

    精选12种与多线程和并发处理相关的设计模式 264张图表 + 300段Java示例程序 = 轻松学习多线程编程 日本经典多线程入门书,原版长销11年! 本书适合以下读者阅读 a.对多线程感兴趣的人 b.对Java编程感兴趣的人 c.对...

    C#第二版课后习题答案

    3、举例说明using关键字有哪些主要用途。 【解答】 在C#中,using关键字有3个用途 1)指定引用的命名空间,例如:using System.Windows.Forms; 2)简化命名空间的层次表达形式,例如:using WinForm=System.Windows....

    黑马程序员:java基础之装饰设计模式

    一、什么是装饰设计模式  当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能,那么自定义的类成为装饰类。  装饰类通常会通过构造方法,传递进来一个需要装饰的...

    黑马程序员安卓Android52期培训课

    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 设计模式 免费 视频课程

    java 设计模式 免费 视频课程 更详细课程大纲入口:https://edu.csdn.net/course/detail/23462 详细课程直接播放地址:https://edu.csdn.net/course/play/23462

    图解java多线程设计模式 2017年8月最新版

    这本书的pdf文件有162M,是最新版高清的pdf,网上原书售价60多元,这里提供的附件是百度云的链接地址。

    《非程序员》第51期

    模型驱动软件开发模式(下) ...在“Zemindar”项目中,本文作者之一运用DSL实现了在运行期间终端用户的复杂算法和统计函数的设计。在这个例子中,DSL不必发明创造,并且第三方的现货供应的Java电子表格组件被...

    黑马程序 8天PHP开发笔记

    定义:框架是一堆包含了常量、方法和类等代码的集合,它是一个半成品的应用,只包含了一些项目开发的时候所使用的底层架构,并不包含业务逻辑,框架还包含了一些优秀设计模式,如单例模式、工厂模式、AR(Active ...

    黑马程序员49期java源码-all-antipattern-demystified-blog:全反模式揭秘博客

    黑马程序员49期 java源码揭开所有反模式的神秘面纱 架构师是在大多数关键技术方面拥有丰富经验的抽象主义者。 我删除了重复项并使用备用名称再次对它们进行分类。 可能其中一些在,但别担心,我们稍后会调查它们。 ...

    java面试宝典

    一. Java基础部分 二. 算法与编程 四. Java web部分 五. 数据库部分 六. XML部分 七....八. 软件工程与设计模式 九. j2ee部分 十. EBJ部分 十一. webservice部分 十二. Linux 十三.问得稀里糊涂的题

    c++程序设计教程第二版答案

    #include<iostream> using namespace std; class zhuchuan { ... cout模式串在主串中出现次数为"; cout替换后的模式串为"; for(i=0;i;i++) cout[i];cout; return 0; }

    Java源码包100个设计实例.zip

    Java源码包100个设计实例, 大量 实例,可以作为你的学习设计参考。 实例如下: Applet钢琴模拟程序java源码 Calendar万年历 copass源代码.rar DataBuffer在Java中使用ADO.NET.rar EJB 模拟银行ATM流程及操作源代码 ...

    mfc教程(word版)

    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...

Global site tag (gtag.js) - Google Analytics