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设计模式(持续更新)的更多相关文章

  1. Java设计模式 - 持续更新

    注意,此博客来源于我的 OneNote 笔记本 因此属于图片形式进行展示,这意味着你可以: 不经过我的同意进行保存 不经过我的同意进行发布 我仍然希望搬运时留一个网址指明来处:我的博客园 多谢!以下是 ...

  2. MVC设计模式(持续更新中)

    MVC设计模式--->英文全称为: model(模型)  View (视图)  Controller(控制)   MVC是一种设计思想.这种思想强调实现模型(Model).视图(View)和控制 ...

  3. 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的无状态模 ...

  4. 我的敏捷、需求分析、UML、软件设计电子书 - 下载(持续更新中)

    我将所有我的电子书汇总在一起,方便大家下载!(持续更新) 文档保存在我的网站——软件知识原创基地上(www.umlonline.org),请放心下载. 1)软件设计是怎样炼成的?(2014-4-1 发 ...

  5. java视频教程 Java自学视频整理(持续更新中...)

    视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...

  6. IT书籍下载汇总--持续更新

    本书单由北北分享,并持续更新,请将该地址加入收藏夹:北北的书单 .badge{float:right;}.list-group-item > .badge + .badge{margin-rig ...

  7. UIButton 文档翻译(持续更新)

    UIButton 文档翻译 继承 UIControl; UIView; UIResponder; NSObject 协议 UIFocusEnvironment,UIAppearanceContaine ...

  8. 【 js 基础 】【 源码学习 】源码设计 (持续更新)

    学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析第二部分:undersc ...

  9. Python设计模式 - 总览(更新中...)

    最近打算重构部分python项目,有道是"工欲善其事,必先利其器",所以有必要梳理一下相关设计模式.每次回顾基本概念或底层实现时都会有一些新的收获,希望这次也不例外. 本系列打算先 ...

  10. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

随机推荐

  1. NVIDIA FFmpeg 转码技术分析

    NVIDIA FFmpeg 转码技术分析 所有从 Kepler 一代开始的 NVIDIA GPUs 都支持完全加速的硬件视频编码,而从费米一代开始的所有 GPUs 都支持完全加速的硬件视频解码.截至 ...

  2. CUDA 11功能展示

    CUDA 11功能展示 CUDA 11 Features Revealed 新的NVIDIA A100 GPU基于NVIDIA安培GPU架构,实现了加速计算的最大一代飞跃.A100 GPU具有革命性的 ...

  3. C#后台定义一个DataTable并手动写入静态数据(测试数据)

    //创建一个DataTable,并为之添加数据(自定义DataTable) DataTable dtz = new DataTable(); //添加Table中的列 DataColumn dc1 = ...

  4. Java 面试题关于包装类

    这几个问题的知识点涉及的内容非常的刁钻,值得自己好好的理解. 问以下程序的输出结果是: 问题一: Object object=true ? new Integer(1):new Double(2.0) ...

  5. maven 安装、下载、配置,idea中的maven设置

    1.从Maven官网下载压缩包 2.将压缩包解压到你像放置Maven的路径,我放置在D:\0_FileSave\Maven 3.创建本地仓库  MavenRepository 在Maven解压路径下D ...

  6. python做。大神空闲时间能帮忙弄一串代码嘛?猜拳游戏,分很多种手的背面和正面,最后剩下的再石头剪刀布

    .每天课程结束后,老师会选择一列的同学清扫教室,人数不定(建议根据当时情况输入),在收拾完教室后,最后一步是需要从这一列的同学中选择1-2人去倒垃圾桶,垃圾桶数量根据当时情况决定,目前采取的方式是, ...

  7. 29.qt quick-在QML中调用C++类

    1.Qml调用C++类 Qt QML模块提供了一组API,用来将C++类扩展QML中.您可以编写扩展来添加自己的QML类型,扩展现有的Qt类型,或调用无法从普通QML代码访问的C/C++函数本章将学习 ...

  8. 【模拟8.09】建设城市(city) (容斥)

    放在了考试T1 发现70分的DP很水啊,f[i][j]为当前位置是i分配了j个队的方案 我们用前缀和统计,在将i删去,j倒序枚举,就可以删掉一维(也可以滚动数组滚起来) 1 #include<i ...

  9. 其实 Linux IO 模型没那么难

    文章首发于公众号「陈树义」及个人博客 shuyi.tech,欢迎关注访问. 博主个人独立站点开通啦!欢迎点击访问:https://shuyi.tech IO 其实就是 Input 和 Output,在 ...

  10. 基于C#的多边形冲突检测

    之前在项目上碰到了一个多边形冲突检测的问题,经百度.bing.google,发现目前已有的方案,要么是场景覆盖不全,要么是通过第三方类库实现(而这些第三方类库几乎是无法逆向反编译的),而项目中禁止使用 ...