JAVA设计模式之单例模式

  1. import java.util.HashMap;
  2. import java.util.Map;
  3.  
  4. /**
  5. * 设计模式之单例模式
  6. * 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
  7. * 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,
  8. * 不需要实例化该类的对象。
  9. *
  10. * 1.单例模式只能有一个实例
  11. * 2.单例必须自己创建自己的唯一实例
  12. * 3.单例必须给其他所有对象提供这一实例
  13. *
  14. * 主要解决:一个全局使用的类频繁地创建与销毁。
  15. *
  16. * 何时使用:当您想控制实例数目,节省系统资源的时候。
  17. *
  18. * @author dyq
  19. *
  20. */
  21. public class DesignPatternSingleton {
  22. public static void main(String[] args) {
  23. SlackerSingletonObject slackerSingletonObject = SlackerSingletonObject.getInstance();
  24. HungrySingletonObject hungrySingletonObject = HungrySingletonObject.getInstance();
  25. EnumSingletonObject enumSingletonObject = EnumSingletonObject.INSTANCE;
  26. }
  27. }
  28. /**
  29. * 懒汉模式-单例模式
  30. * @author dyq
  31. *
  32. */
  33. class SlackerSingletonObject{
  34. private static SlackerSingletonObject instance;
  35. private SlackerSingletonObject() {
  36. System.out.println("加载SlackerSingletonObject");
  37. }
  38. public static synchronized SlackerSingletonObject getInstance() {
  39. if(instance==null) {
  40. instance = new SlackerSingletonObject();
  41. }
  42. return instance;
  43. }
  44. public static Map<String,Object> getProFile(){
  45. Map<String,Object> map = new HashMap<String,Object>();
  46. map.put("jdbcDriver", "oracle");
  47. return map;
  48. }
  49. }
  50. /**
  51. * 饿汉模式-单例模式
  52. */
  53. class HungrySingletonObject{
  54. private static HungrySingletonObject instance = new HungrySingletonObject();
  55. private String name ;
  56. private HungrySingletonObject() {
  57. System.out.println("加载HungrySingletonObject");
  58. }
  59. public static HungrySingletonObject getInstance() {
  60. return instance;
  61. }
  62. public static Map<String,Object> getProFile(){
  63. Map<String,Object> map = new HashMap<String,Object>();
  64. map.put("jdbcDriver", "oracle");
  65. return map;
  66. }
  67. }
  68.  
  69. /**
  70. * 枚举--单例模式
  71. */
  72. enum EnumSingletonObject{
  73. INSTANCE;
  74. public static Map<String,Object> getProFile(){
  75. Map<String,Object> map = new HashMap<String,Object>();
  76. map.put("jdbcDriver", "oracle");
  77. return map;
  78. }
  79. }

JAVA设计模式之工厂模式

  1. /**
  2. * 设计模式之工厂模式
  3. * 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
  4. * 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
  5. *
  6. * 主要解决:主要解决接口选择的问题。
  7. * 何时使用:我们明确地计划不同条件下创建不同实例时。
  8. * 如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
  9. * 关键代码:创建过程在其子类执行。
  10. * @author dyq
  11. *
  12. */
  13. public class DesignPatternFactory {
  14. public static void main(String[] args) {
  15. ShapeFactory shapeFactory = new ShapeFactory();
  16.  
  17. //获取 Circle 的对象,并调用它的 draw 方法
  18. Shape shape1 = shapeFactory.getShape("CIRCLE");
  19.  
  20. //调用 Circle 的 draw 方法
  21. shape1.draw();
  22.  
  23. //获取 Rectangle 的对象,并调用它的 draw 方法
  24. Shape shape2 = shapeFactory.getShape("RECTANGLE");
  25.  
  26. //调用 Rectangle 的 draw 方法
  27. shape2.draw();
  28.  
  29. //获取 Square 的对象,并调用它的 draw 方法
  30. Shape shape3 = shapeFactory.getShape("SQUARE");
  31.  
  32. //调用 Square 的 draw 方法
  33. shape3.draw();
  34. }
  35. }
  36.  
  37. interface Shape{
  38. public void draw();
  39. }
  40.  
  41. class Rectangle implements Shape{
  42. @Override
  43. public void draw() {
  44. System.out.println("Inside Square::draw() method.");
  45. }
  46.  
  47. }
  48. class Circle implements Shape{
  49. @Override
  50. public void draw() {
  51. System.out.println("Inside Circle::draw() method.");
  52. }
  53. }
  54. class Square implements Shape {
  55. @Override
  56. public void draw() {
  57. System.out.println("Inside Square::draw() method.");
  58. }
  59. }
  60. class ShapeFactory {
  61. public Shape getShape(String shapeType) {
  62. if(shapeType==null) {
  63. return null;
  64. }
  65. if(shapeType.equalsIgnoreCase("CIRCLE")) {
  66. return new Circle();
  67. }else if(shapeType.equalsIgnoreCase("RECTANGLE")) {
  68. return new Rectangle();
  69. }else {
  70. return new Square();
  71. }
  72. }
  73. }

JAVA常用设计模式(一、单例模式、工厂模式)的更多相关文章

  1. java常用设计模式二:工厂模式

    1.简单工厂模式(静态工厂方法模式) 抽象实例: public interface People { void talk(); } 具体实例: public class Doctor implemen ...

  2. 《java常用设计模式之----单例模式》

    一.简介 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创 ...

  3. java常用设计模式五:建造者模式

    1.定义 是一种对象构建的设计模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象. 产品类:一般是一个较为复杂的对象,也就是说创建对象的 ...

  4. JAVA基础——设计模式之简单工厂模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...

  5. PHP设计模式之 单例模式 工厂模式 实例讲解

    单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的.所有的单例模式至少拥有以下三种公共元素:1. 它们必须拥有一个构造函数,并且必须被标记为priva ...

  6. java常用设计模式九:桥接模式

    一.概述 将抽象部分与它的实现部分分离,使它们都可以独立地变化.它是一种对象结构型模式.比如存在2个维度,第一个维度有一个抽象类A和对应的子类A1和A2:第二个维度有另一个接口B和对应的子类B1和B2 ...

  7. java常用设计模式八:代理模式

    一.概述 代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象. 其特征是代理类与委托类有同样的接口,真正的核心业务逻辑还是在实际对象里面. 二.为什么要使用代理模式 当 ...

  8. java常用设计模式三:原型模式

    在说原型模式之前先说一下浅拷贝和深拷贝的概念 一.浅拷贝和深拷贝 1.浅拷贝 在java中,对象创建后需要有一个引用变量来指向该对象实际的地址空间,也就是说引用变量与对象实体是两个不同的数据体.在Ob ...

  9. java常用设计模式十一:策略模式

    一.概述 定义:策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.(概念不好理解,可以看第二节的合例子) 基本角色: 环境( ...

  10. java常用设计模式十:模板模式

    一.定义 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 如果上面的话不好理解,请看下面的例子 二.示例 1)定义一个模 ...

随机推荐

  1. $O(n+log(mod))$求乘法逆元的方法

    题目 LOJ #152. 乘法逆元 2 题解 一个奇技淫巧qwq.可以离线求乘法逆元,效率\(O(n+log(mod))\). 考虑处理出\(s_n\)表示\(\prod_{i=1}^na_i\).以 ...

  2. 经典排序js实现

    https://www.cnblogs.com/onepixel/articles/7674659.html

  3. IDEA中更改Tomcat服务器的URL

    先别参考以下的做法,貌似出了点状况,后续修正!!! 直接上图吧 看IDEA的右上角 点击黄色方框内的Edit Configurations,进入以下的编辑面 后面四个框内的都可以修改,当然不要修改和其 ...

  4. GeoServer服务器环境的搭建

    .java 的安装  下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 我下载的java 1.8版本 1. ...

  5. html5画心

     

  6. fabric网络环境启动过程详解

    这篇文章对fabric的网络环境启动过程进行讲解,也就是我们上节讲到的启动测试fabric网络环境时运行network_setup.sh这个文件的执行流程 fabric网络环境启动过程详解 上一节我们 ...

  7. JavaScript基础三

    1.10 关于DOM的事件操作 1.10.1 JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数. ...

  8. Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1)C. Morse Code

    题意:给你n个01字符,每次问你前缀的所有本质不同的子串,由摩斯密码组成的方案数和. 题解:离线处理,把字符建sam,通过topo序来dp计算每个节点表示的子串方案数的和.统计答案时,把n个字符挨个匹 ...

  9. 【Oracle】【8】大批量update某个字段

    正文: 需实现:将A表的某个字段的值复制到B表中 我们一般会这样写:UPDATE B SET B.NAME = (SELECT A.NAME FROM A WHERE A.NO = B.NO) 出现的 ...

  10. icpc2018-焦作-D-几何模拟

    https://nanti.jisuanke.com/t/34142 上午可能是供氧不足,推的式子死活不对,晚上莫名其妙又来了一次就过了. 分两种情况讨论,如果能够完全进入弯道答案就是固定的就是: s ...