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. 如果攻击者操控了 redirect_uri,会怎样?

    读者在看这篇文章之前,请先了解 Oauth2.0 的 Authorization Code 授权流程,可以看 Authorization Code 授权原理和实现方法 在 Token Enpoint ...

  2. 二、Nginx 服务器升级

      1,编译新版本的nginx 软件 [root@client lnmp_soft]# tar -xf nginx-1.12.2.tar.gz -C .. [root@client lnmp_soft ...

  3. 【NX二次开发】打开信息窗口UF_UI_open_listing_window

    头文件:uf_ui_ugopen.h函数名:UF_UI_open_listing_window 函数说明:打开信息窗口 测试代码: #include <uf.h> #include < ...

  4. 题解 P3232 [HNOI2013]游走

    洛谷P3232[NOI2013]游走 题目描述 给定一个 n 个点 m 条边的无向连通图,顶点从 1 编号到 n,边从 1 编号到 m. 小 Z 在该图上进行随机游走,初始时小 Z 在 1 号顶点,每 ...

  5. 【题解】SOFTWARE 二分+搜索/dp

    题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术人员分工完成,每个技术人员完成同一软件的不同模块的所用的天数是 ...

  6. kubeadm部署高可用版Kubernetes1.21[更新]

    环境规划 主机名 IP地址 说明 k8s-master01 ~ 03 192.168.3.81 ~ 83 master节点 * 3 k8s-master-lb 192.168.3.200 keepal ...

  7. 38、tftp搭建

    38.1.什么是tftp: TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文 件传输的协议,提供 ...

  8. 7、resync实时备份

    sersync+rsync(增量,无差异备份),resync支持多线程,效果比inotify更好,配置思想和inotify很相似 7.1.在备份服务器上安装并配置rsync服务,实现nfs共享目录,可 ...

  9. QQ邮箱获取授权码方法

    1.登录QQ邮箱,点击"设置" 2.点击"账户" 3.开启POP3/SMTP服务 4.点击"生成授权码" 5.完成验证后,即可生成授权码 P ...

  10. hadoop学习(二)hadoop集群的启动

    一.完全分布式集群环境的搭建 1.配置hosts文件:将三台集群服务器的主机名与IP的对应关系互相配置到对方的hosts文件中,以便对方服务器能通过主机名寻找IP,hosts文件在/etc目录下. 2 ...