JAVA常用设计模式(一、单例模式、工厂模式)
JAVA设计模式之单例模式
import java.util.HashMap;
import java.util.Map; /**
* 设计模式之单例模式
* 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
* 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,
* 不需要实例化该类的对象。
*
* 1.单例模式只能有一个实例
* 2.单例必须自己创建自己的唯一实例
* 3.单例必须给其他所有对象提供这一实例
*
* 主要解决:一个全局使用的类频繁地创建与销毁。
*
* 何时使用:当您想控制实例数目,节省系统资源的时候。
*
* @author dyq
*
*/
public class DesignPatternSingleton {
public static void main(String[] args) {
SlackerSingletonObject slackerSingletonObject = SlackerSingletonObject.getInstance();
HungrySingletonObject hungrySingletonObject = HungrySingletonObject.getInstance();
EnumSingletonObject enumSingletonObject = EnumSingletonObject.INSTANCE;
}
}
/**
* 懒汉模式-单例模式
* @author dyq
*
*/
class SlackerSingletonObject{
private static SlackerSingletonObject instance;
private SlackerSingletonObject() {
System.out.println("加载SlackerSingletonObject");
}
public static synchronized SlackerSingletonObject getInstance() {
if(instance==null) {
instance = new SlackerSingletonObject();
}
return instance;
}
public static Map<String,Object> getProFile(){
Map<String,Object> map = new HashMap<String,Object>();
map.put("jdbcDriver", "oracle");
return map;
}
}
/**
* 饿汉模式-单例模式
*/
class HungrySingletonObject{
private static HungrySingletonObject instance = new HungrySingletonObject();
private String name ;
private HungrySingletonObject() {
System.out.println("加载HungrySingletonObject");
}
public static HungrySingletonObject getInstance() {
return instance;
}
public static Map<String,Object> getProFile(){
Map<String,Object> map = new HashMap<String,Object>();
map.put("jdbcDriver", "oracle");
return map;
}
} /**
* 枚举--单例模式
*/
enum EnumSingletonObject{
INSTANCE;
public static Map<String,Object> getProFile(){
Map<String,Object> map = new HashMap<String,Object>();
map.put("jdbcDriver", "oracle");
return map;
}
}
JAVA设计模式之工厂模式
/**
* 设计模式之工厂模式
* 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
* 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
*
* 主要解决:主要解决接口选择的问题。
* 何时使用:我们明确地计划不同条件下创建不同实例时。
* 如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
* 关键代码:创建过程在其子类执行。
* @author dyq
*
*/
public class DesignPatternFactory {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory(); //获取 Circle 的对象,并调用它的 draw 方法
Shape shape1 = shapeFactory.getShape("CIRCLE"); //调用 Circle 的 draw 方法
shape1.draw(); //获取 Rectangle 的对象,并调用它的 draw 方法
Shape shape2 = shapeFactory.getShape("RECTANGLE"); //调用 Rectangle 的 draw 方法
shape2.draw(); //获取 Square 的对象,并调用它的 draw 方法
Shape shape3 = shapeFactory.getShape("SQUARE"); //调用 Square 的 draw 方法
shape3.draw();
}
} interface Shape{
public void draw();
} class Rectangle implements Shape{
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
} }
class Circle implements Shape{
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
class Square implements Shape {
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
class ShapeFactory {
public Shape getShape(String shapeType) {
if(shapeType==null) {
return null;
}
if(shapeType.equalsIgnoreCase("CIRCLE")) {
return new Circle();
}else if(shapeType.equalsIgnoreCase("RECTANGLE")) {
return new Rectangle();
}else {
return new Square();
}
}
}
JAVA常用设计模式(一、单例模式、工厂模式)的更多相关文章
- java常用设计模式二:工厂模式
1.简单工厂模式(静态工厂方法模式) 抽象实例: public interface People { void talk(); } 具体实例: public class Doctor implemen ...
- 《java常用设计模式之----单例模式》
一.简介 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创 ...
- java常用设计模式五:建造者模式
1.定义 是一种对象构建的设计模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象. 产品类:一般是一个较为复杂的对象,也就是说创建对象的 ...
- JAVA基础——设计模式之简单工厂模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...
- PHP设计模式之 单例模式 工厂模式 实例讲解
单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的.所有的单例模式至少拥有以下三种公共元素:1. 它们必须拥有一个构造函数,并且必须被标记为priva ...
- java常用设计模式九:桥接模式
一.概述 将抽象部分与它的实现部分分离,使它们都可以独立地变化.它是一种对象结构型模式.比如存在2个维度,第一个维度有一个抽象类A和对应的子类A1和A2:第二个维度有另一个接口B和对应的子类B1和B2 ...
- java常用设计模式八:代理模式
一.概述 代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象. 其特征是代理类与委托类有同样的接口,真正的核心业务逻辑还是在实际对象里面. 二.为什么要使用代理模式 当 ...
- java常用设计模式三:原型模式
在说原型模式之前先说一下浅拷贝和深拷贝的概念 一.浅拷贝和深拷贝 1.浅拷贝 在java中,对象创建后需要有一个引用变量来指向该对象实际的地址空间,也就是说引用变量与对象实体是两个不同的数据体.在Ob ...
- java常用设计模式十一:策略模式
一.概述 定义:策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.(概念不好理解,可以看第二节的合例子) 基本角色: 环境( ...
- java常用设计模式十:模板模式
一.定义 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 如果上面的话不好理解,请看下面的例子 二.示例 1)定义一个模 ...
随机推荐
- 11个简单的Java性能调优技巧,傻瓜都能学会!
大多数开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识.好吧,不能说这是完全错误的.优化应用程序以获得最佳性能不是一件容易的事情.但是,这并不意味着如果你不具备这些知识,就不能做任何事情. ...
- HashSet、LinkedHashSet、TreeSet 简明解释
HashSet:元素无序.比如存入a.e.c.d.b,输出d.e.b.c.a. LinkedHashSet:怎么存进去,怎么出来.比如存入a.e.c.d.b,输出a.e.c.d.b. TreeSet: ...
- Not supported for DML operations
问题原因 缺失@Modifying注解 问题解决 在自定义的修改方法(delete.update)上面除了@Transactional注解和@Query还需要@Modifying注解 Bug重现 or ...
- 使用MyBatis Generator 1.3.7自动生成代码
MyBatis Generator是一款mybatis自动代码生成工具,可以通过配置后自动生成文件. MyBatis Generator有几种方法可以生成代码,下面是其中一种. 一.官网下载 MyB ...
- 【搬运】Wget 命令详解
用过 Linux 系统的对于 wget 不陌生吧,从网上下载资源等操作都是少不了它,它体积小但功能集全,支持 FTP HTTP HTTPS 协议下载方式,支持断点续传 代理服务器. 现在 Window ...
- SQL Developer连接Oracle出现“IO 错误:Undefined Error”
1.环境 Win 10系统 Oracle 11 g R 2 JDK 1.8.0_152 SQL Developer-17.2.0 2.安装完成后,运行SQL developer,选择JDK路径,连接出 ...
- C/C++.【转】解析URL的转义字符百分比(%)字符串
1.来自:[HTTP]_[C_C++]_[解析URL的转义字符百分比字符串] - 猪一戒 - 博客园.html(http://www.cnblogs.com/zhuyijie/p/6465303.ht ...
- idea提示不区分大小写,解决方法
- 前端布局神器display:flex
2009年,W3C提出了一种新的方案--Flex布局,可以简便.完整.响应式地实现各种页面布局.目前已得到所有现在浏览器的支持. flex浏览器支持 一.Flex布局是什么? Flex是Flexi ...
- 『TensorFlow』降噪自编码器设计
背景简介 TensorFlow实现讲解 设计新思路: 1.使用类来记录整个网络: 使用_init_()属性来记录 网络超参数 & 网络框架 & 训练过程 使用一个隐式方法初始化网络参数 ...