`
lpdyxm
  • 浏览: 25683 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于几个比较常见的设计模式

阅读更多
  1. 单例模式

这是一种应用非常广泛的设计模式,应用中许多组件都只需要单个实例,

两个优势:

  •  减少创建java实例所带来的系统开销,
  • 便于系统跟踪单个java实例的生命周期、实例状态!

具体的代码实现:

  class Singleton{
private static Singleton singleton;

private Singleton(){}:

public static Singleton getSingleton(){

 if(singleton==null){
 singleton=new Singleton();

}

return singleton;

}

}

测试类:

public class TestSingleton{
  public static void main(String args[]){
  //创建实例不能通过构造器,只能通过getSingleton()方法来实现

Singleton s1=Singleton.getSingleton();

Singleton s2=singleton.getSingleton();

System.out.println(s1==s2);//将返回true;

 }

}

 

运用举例:

在javaee的运用中,可能只需要一个数据库引擎访问点,hibernate访问时只需要一个SessionFactory 实例,如果在系统为它们创建多个实例,会加大对系统的开销,同时也没什么意义!

 

 

2.简单工厂模式:将多个类对象交给工厂类来生成的设计方式就是简单工厂模式

什么叫硬编码耦合?

直接通过调用类的类名,一旦系统需要重构,就必须修改类名了!

设计方法:

比如A类要调用b类里的方法,刚开始我们会选择直接通过new关键字来创建一个b实例,然后调用b类的方法,但是我们如果用简单工厂模式的话,就可以这样来实现:

让b类实现以个d接口,而A类只需要D接口耦合----A类并不直接使用new关键字来创建B实例,而是重新定义一个工厂类,DFactory,由该工厂类来负责创建D实例,而A类只需要通过DFactory工厂的方法来得到ib的实例,以后如果A类需要调用E类的方法,只需要E类也实现D接口!并改写DFActory中创建D撕裂的方法,让该工厂产生E实例即可。

 

实例讲解:

工厂类:

public class BuildFactory {
   public Output getOut(){
    return new Computer();//这个方法如同:Output out=(Output)new Computer();
   }
}

接口:

public interface Output {
  public String out();
  public String out2();
}

调用类:

public class Printer implements Output {

 @Override
 public String out() {
  // TODO Auto-generated method stub
 
  BuildFactory factory=new BuildFactory();
  

  return factory.getOut().out();
 }

 @Override
 public String out2() {
  // TODO Auto-generated method stub
  
  return null;
 }

}

 

被调用类:

public class Computer implements Output {

 @Override
 public String out() {
  // TODO Auto-generated method stub
  
  return "abs";
 }

 @Override
 public String out2() {
  // TODO Auto-generated method stub
  
  return "abs2";
 }
  
}

 

工厂方法和抽象工厂

工厂方法:在简单工厂模式的前提下,做出了如下改进,但使用工厂方法设计模式时,对象调用者需要与具体的工厂类耦合:当需要不同对象时,程序需要调用相应工厂对象的方法来得到所需要的对象。

抽象工厂类:工厂类不制造具体的被调用对象,而是制造不同的工厂对象。

将上例中的工厂抽象为一个接口!

新增加了两个生成实例的接口!

工厂方法具体代码如下:

public interface BuilderFactory {
    Output getOut();
}
public class Computer implements Output  {

 @Override
 public String out1() {
  // TODO Auto-generated method stub
  return "computer";
 }

 @Override
 public void out2() {
  // TODO Auto-generated method stub
  
 }

}

 

public class ComputerFactory implements BuilderFactory{

 @Override
 public Output getOut() {
  // TODO Auto-generated method stub
  return  new Computer();
 }

}

 

public interface Output {
  String out1();
  void out2();
}

 

public class Printer implements Output {

 @Override
 public String out1() {
  // TODO Auto-generated method stub
  return "printer";
 }

 @Override
 public void out2() {
  // TODO Auto-generated method stub
  
 }

}

 

public class PrinterFactory  implements BuilderFactory{

 @Override
 public Output getOut() {
  // TODO Auto-generated method stub
  return new Printer();
 }

}

 

抽象工厂模式的具体代码如下:

与上面不同的在于:

public class OutputFactoryFacotory {
  public static OutputFactory getOutputFactory(){
   return null;//这里就是逻辑代码(通过条件选择要创建的工厂对象)
  }
}

 

 

代理模式:客户端代码不能活不想直接访问被调用对象,而是额外的创建一个代理对象返回给客户端使用

 

 

 

未完待续!!!!

 

 

 

0
2
分享到:
评论

相关推荐

    2848.png

    2848

    基于java的进销存或库存管理系统源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    计算机视觉+图片拼接+图片分割

    计算机视觉+图片拼接+图片分割

    onnxruntime-1.11.0-cp37-cp37m-linux_armv7l.whl.zip

    python模块onnxruntime版本

    onnxruntime-1.1.0-cp36-cp36m-linux_armv7l.whl.zip

    python模块onnxruntime版本

    onnxruntime-1.6.0-cp37-cp37m-linux_armv7l.whl.zip

    python模块onnxruntime版本

    B2113 输出亲朋字符串.cpp

    B2113 输出亲朋字符串

    字符数组测试版本.exe

    字符数组测试版本

    快速排序.exe

    快速排序

    AUTOSAR-SWS-EEPROMDriver.pdf

    AUTOSAR_SWS_EEPROMDriver.pdf

    基于的springboot+vue校园宿舍管理系统源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    基于区域生长的肝影像分割系统.zip

    MATLAB是MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。 【主页资源】 遗传算法、免疫算法、退火算法、粒子群算法、鱼群算法、蚁群算法和神经网络算法等常用智能算法的MATLAB实现,包含TSP、LQR控制器、结合量子算法、多目标优化、粒子群等matlab程序。 MATLAB计算机视觉与深度学习实战项目:直方图优化去雾技术、基于形态学的权重自适应图像去噪、多尺度形态学提取眼前节组织、基于分水岭算法的肺癌分割诊断、基于harris 的角点检测(可以直接用matlab自带的函数)、基于K均值的据类算法分割(算法时间有点久)、 区域生长算法进行肝部肿瘤分割(原始分割精度不高)、matlab编写的图像处理相关算法代码及算法原理等等。

    路面裂缝检测识别系统设计.zip

    MATLAB是MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。 【主页资源】 遗传算法、免疫算法、退火算法、粒子群算法、鱼群算法、蚁群算法和神经网络算法等常用智能算法的MATLAB实现,包含TSP、LQR控制器、结合量子算法、多目标优化、粒子群等matlab程序。 MATLAB计算机视觉与深度学习实战项目:直方图优化去雾技术、基于形态学的权重自适应图像去噪、多尺度形态学提取眼前节组织、基于分水岭算法的肺癌分割诊断、基于harris 的角点检测(可以直接用matlab自带的函数)、基于K均值的据类算法分割(算法时间有点久)、 区域生长算法进行肝部肿瘤分割(原始分割精度不高)、matlab编写的图像处理相关算法代码及算法原理等等。

    基于STM32微控制器的数据采集系统的固件

    目前实现的功能: 示波器 伏特计 逻辑分析仪(实验性) PWM测量 PWM输出 基于DDS(直接数字合成)的发生器 功能的选择取决于所选的目标。在小型器件上,由于外设约束或引脚排列有限,仅实现了功能子集。 固件还可以在不同的配置之间切换。例如,和 .Voltmeter + PWMOscilloscope + PWM 固件通过虚拟 COM 端口(USB CDC 类)直接或使用 UART 转 USB 桥接器与 PC 应用程序通信。 如何运行固件 您可以在发布部分下载已编译的二进制文件,并通过 ST-Link(或任何其他调试器)或通过 USB 设备固件更新 (DFU) 下载

    C++与操作系统等面试题55

    C++与操作系统等面试题55

    抓包APP的https协议报文视频教程

    1.雷电模拟器安装设置 1.1 安装模拟器 1.2 模拟器设置 2.PC电脑上的证书查看及清理 3.安装抓包工具 Charles 并安装根证书 4.Charles代理设置 5.设置模拟器WIFI代理并下载安装证书 6.RootExplorer安装及使用 7.测试抓包APP网络请求数据

    岗位管理体系5大要素全解读.pdf

    岗位管理体系5大要素全解读.pdf

    AUTOSAR-SWS-DefaultErrorTracer.pdf

    AUTOSAR_SWS_DefaultErrorTracer.pdf

    京瓷方式人才培养制度第二部分.pdf

    京瓷方式人才培养制度第二部分.pdf

    onnxruntime-1.3.0-cp37-cp37m-linux_armv7l.whl.zip

    onnxruntime-1.3.0-cp37-cp37m-linux_armv7l.whl.zip

Global site tag (gtag.js) - Google Analytics