黑马程序员java自学总结之--模式
来源:互联网 发布:数据挖掘 毕业论文 编辑:程序博客网 时间:2024/03/29 01:31
------- android培训、java培训、期待与您交流! ----------
装饰者模式:
当想要对已有的对象进行功能增强时,
可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类称为装饰类。
装饰类通常会通过构造方法接收被装饰的对象。
并基于被装饰的对象的功能,提供更强的功能。
class Person{public void chifan(){System.out.println("吃饭");}}class SuperPerson {private Person p ;SuperPerson(Person p){this.p = p;}public void superChifan(){System.out.println("开胃酒");p.chifan();System.out.println("甜点");System.out.println("来一根");}}class PersonDemo{public static void main(String[] args) {Person p = new Person();//p.chifan();SuperPerson sp = new SuperPerson(p);sp.superChifan();}}
在java中的缓冲区的流的类,使用的就是装饰者模式的思想。
单例设计模式:
最先接触是老师讲的饿汉式和懒汉式:
这个类的设计思想:只可以产生一个类的对象,这个类中封装好构造函数,并且这个类可以返回这个实例的对象,我们windows的回收站都是单例设计模式的例子
//饿汉式: public class Singleton{ private static Singleton singleton = new Singleton (); private Singleton (){} public Singleton getInstance(){return singletion;} } //懒汉式: public class Singleton{ private static Singleton singleton = null; public static synchronized synchronized getInstance(){ if(singleton==null){ singleton = new Singleton(); } return singleton; } }比较:
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
推荐使用第一种
策略模式:
策略模式定义
策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
引进策略模式
策略模式是对算法的包装,是把使用算法的责任和算法本身分割开,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:准备一组算法,并将每一个算法封装起来,使得它们可以相互交换。策略模式的简略图如下图所示。
策略模式的结构
策略又称作政策模式。策略模式的实例结构如下图所示:
这个模式涉及到的三个角色:
环境(Context)角色:持有一个Strategy类的引用。
抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所以的具体策略类所需的接口。
具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。
模板方法模式:
我的模板方法里面设定好执行的逻辑,然后其中的各个小的操作可以放到子类中去实现,事先确定好算法。
- 黑马程序员java自学总结之--模式
- 黑马程序员java自学总结之--集合
- 黑马程序员java自学总结之--反射
- 黑马程序员java自学总结之--异常
- 黑马程序员java自学总结之--泛型
- 黑马程序员java自学总结之--网络编程
- 黑马程序员java自学总结之--面向对象
- 黑马程序员java自学总结--java基础
- 黑马程序员 Java自学总结四 函数
- 黑马程序员 Java自学总结五 数组
- 黑马程序员 Java自学总结十一 线程
- 黑马程序员 Java自学总结十五 GUI
- 黑马程序员java自学总结--IO
- 黑马程序员java自学之--自测题
- 黑马程序员java自学之--数组
- 黑马程序员 Java自学总结六 面向对象三个特征之封装
- 黑马程序员 Java自学总结七 面向对象三个特征之继承
- 黑马程序员java自学总结之--数据关系模型和对象模型
- boost::ASIO的异步方式
- NodeJS深受欢迎的6大原因
- winfrom表格DataGridView下拉框DataGridViewComboBoxColumn选择事件
- android -- 编译不同库及编译脚本之区别
- 黑马程序员——Java基础---面向对象(接口)--第7天--第95-97集
- 黑马程序员java自学总结之--模式
- freemarker.core.ParseException:Unexpected end of file reached
- 在vs&qt中使用资源文件
- 使用enable_shared_from_this
- 安卓渗透神器dsploit笔记
- QString字符转换
- 10W个为什么
- freemarker.core.InvalidReferenceException
- 黑马程序员——Java基础---面向对象(多态)--第8天--第98-106集