JavaSE进阶-Java设计模式
来源:互联网 发布:太师鞭 知乎 编辑:程序博客网 时间:2024/06/08 11:11
本笔记基于:
[1]传智播客_java学科2014年2月份设计模式公开课
[2]传智播客Java设计模式年第二次公开课视频和资料公开课
[3] GOF设计模式_尚学堂官网
备用链接:链接: https://pan.baidu.com/s/1slttRS5 密码: ray8
可能视频都是13年或者14年的,普通会员下载的很慢,建议去淘宝租个百度网盘超级会员才可以满速下载或者使用Google Chrome浏览器(不是什么360浏览器或者QQ浏览器)自带下载也可能会看到下载的希望
怎么学习JavaSE?
- A:扎实的基本功
- 英语单词(金山词霸)
- 快速的输入能力(英文打字 – 金山打字通)
- B:编程实现能力
- 学习的过程中,老师会讲解一些基础的代码。然后需要大家练习。
- 注意:千万不要简单的代码不愿意写,复杂的代码又写不出来。
- 编程能力不是凭空产生的,是需要经过大量的代码练习培养的。
- C:快速排错能力
- 通过输出语句。
- 通过日志Log4j。
- 断点调试。
线程的基本概念以及线程的生命周期
- 线程概念:进程的执行单元,执行路径
- 线程的生命周期:
- 新建-就绪-运行-死亡
- 在线程执行的过程中,有些其他的情况,会导致线程阻塞
Java多线程概念:Java 多线程(三) 线程的生命周期及优先级 - 圣骑士wind - 博客园
设计模式
A:什么是设计模式
- 建筑工地上,工人在盖房子,但是你看不到制造砖的人。
- 在汽车厂房里,你看到的是组装汽车的人,而不是制造零件的人。
- 在软件开发中,UI设计师,系统分析师,代码人员。
- 因此一些专家就把他们在解决某一问题的过程中积累的一些经验进行总结。以帮助后来的人更好地掌握从抽象到具体的方法。
B:为什么要学习设计模式?
- A:让我们对设计模式有一定的了解和理解。
- B:加深我们对面向对中的抽象类和接口的理解。
- 设计模式 – 面向对象加深
- C:搞定设计模式的面试
- 单例设计模式
- 工厂模式,适配器,模板方法,代理…
C:设计模式的学习路线
- A:面向对象思想的建立
- B:UML(统一建模语言)
- 把我们的思想通过一些符号表示出来,任何软件开发人员都是能够看懂的。
- C:了解常见的设计模式
- D:学习并使用设计模式
面向对象思想的建立
- A 封装 隐藏实现的一些细节,提供一种公共的访问方式。
- private来把一些成员变量和成员方法给隐藏起来。
- B 继承 可以具备某些已经存在的功能。
- C 多态 对象在不同时刻体现的不同的状态。
- List list = new ArrayList();
- list = new LinkedList();
设计思想的区别:
- A 抽象类:是对一组具有相同的属性和方法的在逻辑上有关系的一种抽象。
- is a的关系。
- B 接口:对一组具有相同的属性和方法的在逻辑上不相关的事物的一种抽象。
- like a的关系。
- 举例:人,学生,老师
个人小理解:类是对象的归纳,接口是扩展.比如我,你以及他都有相同下载方法以及一些相同的属性,把它们抽成一个抽象类继承,那么可以提高代码的复用性.因为Java中方法是单继承的,所以接口可以来补这个缺点(接口是多继承都可以的)
面向对象设计的几个基本的原则
- A:单一职责
- 系统中的每一个对象应该只有一个单独的职责,所有对象关注的应该是自身职责的完成。(一个类只干一件事)
- 基本思想:高内聚,低耦合。
- B:开闭原则
- 一个对象对扩展开放,对修改关闭。
- 基本思想:对类的改动是通过增加代码进行的,而不是修改现有的代码。
- C:里氏替换原则
- 在任意父类出现的地方,都可以使用子类来替代。
- D:依赖注入原则
- 要依赖于抽象,不要依赖于具体的实现。
- 基本思想:在开发中尽量的面向接口编程。
- E:接口分离原则
- 不要去使用一些不需要使用的功能。
- 基本思想:一个接口不要提供太多的行为。
- F:迪米特原则
- 一个对象对其他的对象应该尽可能少的了解。
- 基本思想:降低耦合。
- G:优先使用组合而不是继承原则
- 基本思想:在复用对象的时候,要优先考虑组合,而不是继承。因为父类的任何改变都可能直接音响子类的行为。
设计分类
- 创建型模式:创建对象。(比如简单工厂模式,工厂方法模式)
- 结构行模式:对象的组成及对象的关系。(怎么盖房子)
- 行为型模式:对象的行为。对象能够做什么。
常用模式讲解:23种设计模式-极客学院Wiki
目前学到的设计模式
单例设计模式
单例设计模式:保证类在内存中只有一个对象。
如何保证类在内存中只有一个对象呢?
- (1)控制类的创建,不让其他类来创建本类的对象。private
- (2)在本类中定义一个本类的对象。Singleton s;
- (3)提供公共的访问方式。 public static Singleton getInstance(){return s}
单例写法两种:
- (1)饿汉式 开发用这种方式。
//饿汉式class Singleton { //1,私有构造函数 private Singleton(){} //2,创建本类对象 private static Singleton s = new Singleton(); //3,对外提供公共的访问方法 public static Singleton getInstance() { return s; } public static void print() { System.out.println("11111111111"); }}
- (2)懒汉式 面试写这种方式。多线程的问题?
//懒汉式,单例的延迟加载模式class Singleton { //1,私有构造函数 private Singleton(){} //2,声明一个本类的引用 private static Singleton s; //3,对外提供公共的访问方法 public static Singleton getInstance() { if(s == null) //线程1,线程2 s = new Singleton(); return s; } public static void print() { System.out.println("11111111111"); }}
- (3)第三种格式
class Singleton { private Singleton() {} public static final Singleton s = new Singleton();//final是最终的意思,被final修饰的变量不可以被更改}
简单工厂模式概述和使用
- A:简单工厂模式概述
- 又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例
- B:优点
- 客户端不需要在负责对象的创建,从而明确了各个类的职责
- C:缺点
- 这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护
- D:案例演示
- 动物抽象类:public abstract Animal { public abstract void eat(); }
- 具体狗类:public class Dog extends Animal {}
- 具体猫类:public class Cat extends Animal {}
- 开始,在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就知道了一个专门的类来创建对象。
public class AnimalFactory { private AnimalFactory(){} //public static Dog createDog() {return new Dog();} //public static Cat createCat() {return new Cat();} //改进 public static Animal createAnimal(String animalName) { if(“dog”.equals(animalName)) {} else if(“cat”.equals(animale)) { }else { return null; } }}
工厂方法模式的概述和使用
- A:工厂方法模式概述
- 工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。
- B:优点
- 客户端不需要在负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性
- C:缺点
- 需要额外的编写代码,增加了工作量
- D:案例演示
-
动物抽象类:public abstract Animal { public abstract void eat(); }
工厂接口:public interface Factory {public abstract Animal createAnimal();}
具体狗类:public class Dog extends Animal {}
具体猫类:public class Cat extends Animal {}
开始,在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就知道了一个专门的类来创建对象。发现每次修改代码太麻烦,用工厂方法改进,针对每一个具体的实现提供一个具体工厂。
狗工厂:public class DogFactory implements Factory {
public Animal createAnimal() {…}
}
猫工厂:public class CatFactory implements Factory {
public Animal createAnimal() {…}
}
0 0
- JavaSE进阶-Java设计模式
- Java进阶-设计模式
- java设计模式进阶_singleton
- java设计模式进阶_prototype
- java设计模式进阶_builder
- java设计模式进阶_decorator
- java设计模式进阶_strategy
- java设计模式进阶_visitor
- java设计模式进阶_flyweight
- java设计模式进阶_proxy
- java设计模式进阶_facade
- java设计模式进阶_composite
- java设计模式进阶_bridge
- java设计模式进阶_adapter
- java设计模式进阶_interpreter
- java设计模式进阶_mediator
- java设计模式进阶_chain
- java设计模式进阶_iterator
- springboot多数据源读写分离和主库数据源service层事务控制
- 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
- swagger使用笔记
- Java实现算法之--求子数组和的最大值
- PHP与数据结构之栈的顺序存储
- JavaSE进阶-Java设计模式
- java.lang.RuntimeException: java.sql.SQLException: Too many parameters: expected 0, was given 1 Quer
- 4.14
- 线性结构——用栈实现波兰表达式求值。
- 对象内置方法,继承,instanceof添加上(安全使用)
- tensorflow的基本用法(六)——神经网络可视化
- 1088. Rational Arithmetic (20)[逻辑题]
- Spring学习之缓存机制EhCache
- react-native新导航组件react-navigation详解