8Java设计模式(持续更新)
1.单例模式(Singleton pattern):
单例模式的实现方式是,一个类能返回对象的一个引用(永远是同一个)和一个获得该唯一实例的方法(必须是静态方法)。
饿汉式:
public class SingleTon {
public static SingleTon singleTon = new SingleTon();
private SingleTon(){
}
public static SingleTon getInstance(){
return singleTon;
}
}
懒汉式:
public class SingleTon {
public static SingleTon singleTon ;
private SingleTon(){
}
public static SingleTon getInstance(){
if(singleTon==null) singleTon = new SingleTon();
return singleTon;
}
}
2.工厂模式(Factory pattern):
工厂通常是一个用来创建其他对象的对象。工厂模式根据不同的参数来实现不同的分配方案和创建对象。
工厂模式通常分为:
- 普通工厂模式
- 多个工厂方法模式
- 静态工厂方法模式
public class FactoryTest {
public static void main(String[] args) {
//普通工厂模式,有可能因为传入参数有误,造成创建对象失败。
ProductFactory factory = new ProductFactory();
Product p1 = factory.createProduct("product1");
p1.A();//product1 calls A
p1.B();//product1 calls B
//多个工厂模式,缺点是需要创建工厂对象
MultiProductFactory factory1 = new MultiProductFactory();
Product2 p2 = factory1.createProduct2();
p2.A();//product2 calls A
p2.B();//product2 calls B
//静态工厂模式,可以直接通过类方法获得对象实例
Product1 p3 = StaticProductFactory.createProduct1();
p3.A();//product1 calls A
p3.B();//product1 calls B
}
}
interface Product{
void A();
void B();
}
class Product1 implements Product{
@Override
public void A() {
System.out.println("product1 calls A");
}
@Override
public void B() {
System.out.println("product1 calls B");
}
}
class Product2 implements Product{
@Override
public void A() {
System.out.println("product2 calls A");
}
@Override
public void B() {
System.out.println("product2 calls B");
}
}
class ProductFactory{
public Product createProduct(String casename){
if(casename.equals("product1"))
return new Product1();
else if(casename.equals("product2"))
return new Product2();
else return null;
}
}
class MultiProductFactory{
public Product1 createProduct1(){
return new Product1();
}
public Product2 createProduct2(){
return new Product2();
}
}
class StaticProductFactory{
public static Product1 createProduct1(){
return new Product1();
}
public static Product2 createProduct2(){
return new Product2();
}
}
3.模板方法设计模式:
抽象类体现的是一种模板方法设计模式,抽象类中具有抽象方法,这些抽象方法让子类实现一些必要功能,还具有普通方法,这些方法提高了代码的复用性。子类再继承抽象类的基础上进行拓展,总体上保持抽象类的行为模式。
解决了让确定功能在抽象类中实现,把不确定的功能暴露给子类去实现。
public class TemplateTest {
public static void main(String[] args) {
Template temp = new SubTemplate();
temp.getTime();//724毫秒
}
}
abstract class Template{
public void getTime(){
long startTime= System.currentTimeMillis();
code();
System.out.println((System.currentTimeMillis()-startTime)+"毫秒");
}
public abstract void code();
}
class SubTemplate extends Template{
@Override
public void code() {
for(int i=0;i<100000;i++)
System.out.println(i);
}
}
8Java设计模式(持续更新)的更多相关文章
- Java设计模式 - 持续更新
注意,此博客来源于我的 OneNote 笔记本 因此属于图片形式进行展示,这意味着你可以: 不经过我的同意进行保存 不经过我的同意进行发布 我仍然希望搬运时留一个网址指明来处:我的博客园 多谢!以下是 ...
- MVC设计模式(持续更新中)
MVC设计模式--->英文全称为: model(模型) View (视图) Controller(控制) MVC是一种设计思想.这种思想强调实现模型(Model).视图(View)和控制 ...
- ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借
ASP.NET MVC深入浅出系列(持续更新) 一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...
- 我的敏捷、需求分析、UML、软件设计电子书 - 下载(持续更新中)
我将所有我的电子书汇总在一起,方便大家下载!(持续更新) 文档保存在我的网站——软件知识原创基地上(www.umlonline.org),请放心下载. 1)软件设计是怎样炼成的?(2014-4-1 发 ...
- java视频教程 Java自学视频整理(持续更新中...)
视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...
- IT书籍下载汇总--持续更新
本书单由北北分享,并持续更新,请将该地址加入收藏夹:北北的书单 .badge{float:right;}.list-group-item > .badge + .badge{margin-rig ...
- UIButton 文档翻译(持续更新)
UIButton 文档翻译 继承 UIControl; UIView; UIResponder; NSObject 协议 UIFocusEnvironment,UIAppearanceContaine ...
- 【 js 基础 】【 源码学习 】源码设计 (持续更新)
学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析第二部分:undersc ...
- Python设计模式 - 总览(更新中...)
最近打算重构部分python项目,有道是"工欲善其事,必先利其器",所以有必要梳理一下相关设计模式.每次回顾基本概念或底层实现时都会有一些新的收获,希望这次也不例外. 本系列打算先 ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
随机推荐
- NVIDIA FFmpeg 转码技术分析
NVIDIA FFmpeg 转码技术分析 所有从 Kepler 一代开始的 NVIDIA GPUs 都支持完全加速的硬件视频编码,而从费米一代开始的所有 GPUs 都支持完全加速的硬件视频解码.截至 ...
- CUDA 11功能展示
CUDA 11功能展示 CUDA 11 Features Revealed 新的NVIDIA A100 GPU基于NVIDIA安培GPU架构,实现了加速计算的最大一代飞跃.A100 GPU具有革命性的 ...
- C#后台定义一个DataTable并手动写入静态数据(测试数据)
//创建一个DataTable,并为之添加数据(自定义DataTable) DataTable dtz = new DataTable(); //添加Table中的列 DataColumn dc1 = ...
- Java 面试题关于包装类
这几个问题的知识点涉及的内容非常的刁钻,值得自己好好的理解. 问以下程序的输出结果是: 问题一: Object object=true ? new Integer(1):new Double(2.0) ...
- maven 安装、下载、配置,idea中的maven设置
1.从Maven官网下载压缩包 2.将压缩包解压到你像放置Maven的路径,我放置在D:\0_FileSave\Maven 3.创建本地仓库 MavenRepository 在Maven解压路径下D ...
- python做。大神空闲时间能帮忙弄一串代码嘛?猜拳游戏,分很多种手的背面和正面,最后剩下的再石头剪刀布
.每天课程结束后,老师会选择一列的同学清扫教室,人数不定(建议根据当时情况输入),在收拾完教室后,最后一步是需要从这一列的同学中选择1-2人去倒垃圾桶,垃圾桶数量根据当时情况决定,目前采取的方式是, ...
- 29.qt quick-在QML中调用C++类
1.Qml调用C++类 Qt QML模块提供了一组API,用来将C++类扩展QML中.您可以编写扩展来添加自己的QML类型,扩展现有的Qt类型,或调用无法从普通QML代码访问的C/C++函数本章将学习 ...
- 【模拟8.09】建设城市(city) (容斥)
放在了考试T1 发现70分的DP很水啊,f[i][j]为当前位置是i分配了j个队的方案 我们用前缀和统计,在将i删去,j倒序枚举,就可以删掉一维(也可以滚动数组滚起来) 1 #include<i ...
- 其实 Linux IO 模型没那么难
文章首发于公众号「陈树义」及个人博客 shuyi.tech,欢迎关注访问. 博主个人独立站点开通啦!欢迎点击访问:https://shuyi.tech IO 其实就是 Input 和 Output,在 ...
- 基于C#的多边形冲突检测
之前在项目上碰到了一个多边形冲突检测的问题,经百度.bing.google,发现目前已有的方案,要么是场景覆盖不全,要么是通过第三方类库实现(而这些第三方类库几乎是无法逆向反编译的),而项目中禁止使用 ...