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)定义一个模 ...
随机推荐
- 剑指offer(27)字符串的排列
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述:输入 ...
- vc++2010如何新建项目并在控制台打印helloworld
关于写c++使用什么集成开发环境的问题其实挺纠结的.我找了好久找到codeblocks,发现这款IDE还是最适合用在最标准的c++语法环境中.其实先前装过vs2015旗舰版,但是这款软件太大了,非常消 ...
- 深入学习IOZone【转】
本文转载自:https://blog.csdn.net/werm520/article/details/7262103 深入学习IOZone 刘智朋 2011-3-29 1 ...
- 20175312 2018-2019-2 《Java程序设计》第2周学习总结
20175312 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 已依照蓝墨云班课的要求完成了第二.三章的学习,主要的学习渠道是视频,和书的课后习题. 总结如 ...
- 《温故而知新》JAVA基础四
类的封装 定义:将类的一些信息隐藏起来,不允许外部的程序直接的访问,而是通过该类提供的一些方法来获取 好处:只能通过特定的法方法访问数据,保护了数据, 实现封装的步骤: 修改属性的可见性:(一般类属性 ...
- ubuntun 18.04 安装google浏览器
---恢复内容开始--- 一:下载谷歌浏览器镜像源 sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/ap ...
- leecode第一百五十五题(最小栈)
class MinStack { public: stack<int> cur_stack; stack<int> cur_min;//用来存储最小值的栈 int min_nu ...
- POJ 1088 滑雪(模板题 DFS+记忆化)
Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...
- [Hibernate] inner Join和 left Join
@Test public void test11(){ Session ss=HibernateUtil.getSession(); //根据员工名称(SCOTT)找到和他所在的部门的其他员工的信息 ...
- dilated convolutions:扩张卷积
最近在阅读<Context Encoding for Semantic Segmentation>中看到应用了dilated convolutions. 扩张卷积与普通的卷积相比,除了卷积 ...