`

设计模式--单例模式&&工厂模式

 
阅读更多

 

1.单例模式

public class Singleton {

	private static Singleton instance;
               //外界不能直接访问
	private Singleton() {
	}
	//static 直接通过类名去访问该方法
	public static Singleton getInstance() {
		if (instance == null) {
			instance = new Singleton();
		}
		return instance;
	}
}
public class TestSingleton {

	public static void main(String[] args) {
		Singleton insSingleton1 = Singleton.getInstance();
		Singleton insSingleton2 = Singleton.getInstance();

		System.out.println(insSingleton1 == insSingleton2);
	}
}

 

单例模式的优势:

1.减少创建java实例带来的系统开销

2.便于系统跟踪单个java实例的生命周期、实例状态等

 

什么时候使用单例模式?

某个类在整个工程中只需要一个实例,就可以用单例模式。 

比如你的工程需要读取配置文件,一般情况下你会写个配置文件的类,而这个类在整个工程里只需要new一次,所有调用者都是用同一个实例,那么这个类就可以采用单例模式。

再比如一些管理器的类都是单例的,所有跟管理有关的操做都要调用管理器来进行,管理器不能出现多个,所以要单例,避免管理混乱。 

 

注意:在项目中如果有很大的并发量的情况下,有可能造成同时又多个程序执行这个类实例化的方法,因此我们需要在创建类实例化方法的时候添加同步执行.

 

 Spring框架,可以在配置Bean实例时,指定scope="singleton"来配置单例模式,默认是单例模式。

 

 

2.工厂模式

 

接口

public interface Output {
	void out();
}

 

两个实现类:

public class Printer implements Output {
	public void out() {
		System.out.println("普通打印机输出");
	}
}

 

public class BetterPrinter implements Output {
	public void out() {
		System.out.println("高级打印机输出");
	}
}

 

工厂类 

public class OutputFactory {

	public static Output getOutput(String type) {
		if (type.equalsIgnoreCase("better")) {
			return new BetterPrinter();
		} else {
			return new Printer();
		}
	}
}

 

业务逻辑类

// Computer类对接口Output形成依赖,将Computer与Printer实现类分离开来
public class Computer {
//与接口关联,不与具体的实现类关联
	private Output out;

	public Computer(Output out) {
		this.out = out;
	}

	public void print() {
		out.out();
	}
}

客户端调用

	public static void main(String[] args) {
		OutputFactory factory = new OutputFactory();
		// Output output = factory.getOutput("normal");
		Output output = factory.getOutput("better");

		Computer c = new Computer(output);
		c.print();
	}

  

 工厂模式的优势:统一管理对象的创建过程,客户端可以免去产品创建的责任,减小了代码的耦合度

工厂类提供多种方案,应对客户端的各种“需求”。

 

如果有许多地方都需要生成A的对象,那么你需要写很多A  a=new A()。
如果需要修改的话,你要修改许多地方。
但是如果用工厂模式,你只需要修改工厂代码。其他地方引用工厂,可以做到只修改一个地方,
其他代码都不动,就是解耦了。

spring就是一个工厂类的具体示例

 

分享到:
评论

相关推荐

    设计模式源代码--工厂模式与单例

    本资源主要关注两种经典的设计模式:工厂模式和单例模式。这两种模式在实际编程中非常常见,尤其对于提高代码的可扩展性和可维护性至关重要。 ### 工厂模式 工厂模式是一种创建型设计模式,它提供了一种创建对象的...

    C++设计模式-工厂和单例

    本篇将深入探讨两种重要的设计模式:工厂模式和单例模式,以及如何在VC(Visual C++)环境下实现它们。 ### 工厂模式 **定义**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当...

    一例读懂设计模式-单例模式、简单工厂模式.zip

    本资源“一例读懂设计模式-单例模式、简单工厂模式.zip”旨在帮助初学者通过实例深入理解这两种重要设计模式:单例模式和简单工厂模式。以下是关于这两个模式的详细讲解。 1. **单例模式**: 单例模式是一种限制类...

    设计模式单例模式和工厂模式综合应用

    "设计模式单例模式和工厂模式综合应用"的主题聚焦于两种常用的设计模式:单例模式和工厂模式,并探讨它们如何协同工作来实现高效、灵活的代码结构。这个主题尤其适用于Java编程语言,因为Java的面向对象特性使得设计...

    设计模式之单例模式(结合工厂模式)

    在项目中,`src`目录可能包含了这些设计模式的源码示例,可以用来学习和理解如何实际应用单例模式和工厂模式。通过阅读和分析这些代码,你可以更深入地理解这两种模式的实现细节及其在实际开发中的作用。同时,也...

    C++设计模式--基于Qt4开源跨平台开发框架

    创建型模式如单例模式(Singleton)、工厂模式(Factory Method)和抽象工厂模式(Abstract Factory),主要关注对象的创建过程,旨在减少类之间的耦合度。结构型模式如适配器模式(Adapter)、装饰器模式...

    单例模式源码java-DesignPattern:在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在

    在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在源码中的使用,每种设计模式都举了一个简单的小例子来进行实现,并加以注释 包名解释 一、DesignPattern 1.1 创建型模式 ...

    三种工厂设计模式和两种单例模式

    在本文中,我们将深入探讨三种工厂设计模式——简单工厂模式、抽象工厂模式和工厂方法模式,以及两种单例模式——饿汉单例模式和懒汉单例模式。这些模式都是面向对象设计中的重要组成部分,对于理解和构建可维护、可...

    java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂

    MVC模式使得用户界面与数据逻辑分离,单例模式保证关键资源的唯一访问点,代理模式在访问对象前后增加额外的功能,工厂模式将对象创建与使用分离,简单工厂模式为对象创建提供一个简单便捷的接口。通过这些模式,...

    基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等

    基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等 Java设计模式共有23种,分别为:抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式...

    设计模式之单例模式和工厂模式

    细心整合和单例模式和工厂模式的几种模型,懒汉式,饿汉式,如何并发操作模式,等都有详细讲解

    c# 设计模式实例教程

    单例模式-果园喷洒杀虫剂 访问者模式-果农培育果树 工厂方法模式-果园引进新品种 观察者模式-果园的监控 简单工厂模式-果园种植水果 建造者模式-建造不同的果园 原型模式-建造同样的果园 桥接模式-果园实现统一的...

    设计模式-Java语言中的应用

    设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...

    C++设计模式-基于QT4开源跨平台开发框架 源码

    2. **工厂模式** - QT4的QObject类及其子类提供了一种动态对象创建的方式,通过`QObject::createObject`或`QMetaObject::newInstance`可以实现工厂模式,这在处理插件或者动态加载类时非常有用。 3. **观察者模式**...

    java设计模式--工厂模式

    - `p113` 可能介绍了如何在实际项目中应用工厂模式,以及与其他设计模式(如策略模式、单例模式)的结合。 工厂模式的优点包括: - 客户端与具体的产品实现脱耦,只需关注接口,降低了耦合度。 - 易于添加新产品,...

    设计模式总结-模板设计模式,单例模式(singleTon)

    ### 设计模式总结:模板设计模式与单例模式 #### 模板设计模式 模板设计模式是一种行为型设计模式,它定义了一个算法的骨架,并允许子类为算法的某些步骤提供具体的实现。通过这种方式,算法的基本流程保持不变,...

    java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂 第二部分

    本篇将深入探讨标题中提及的几种设计模式:Model-View-Controller(MVC)模式、单例模式、代理模式以及工厂模式,尤其是简单工厂模式。 **1. Model-View-Controller (MVC) 模式** MVC模式是一种架构模式,它将应用...

    设计模式----工厂模式

    《设计模式——工厂模式》 在软件工程领域,设计模式是一种在特定情境下解决常见问题的模板,它为程序员提供了一种标准的解决方案。工厂模式是面向对象设计中最为人熟知的设计模式之一,属于创建型模式,其主要目标...

    设计模式-工厂模式

    设计模式是软件开发中的一种最佳实践,它们是解决常见问题的经验总结,被广泛应用于各种编程语言中。...在实际编码过程中,结合其他设计模式,如单例模式、建造者模式等,可以构建出更高效、可扩展的系统架构。

    软件设计模式--填空题+简答题(复习7).rar

    3. **Java设计模式应用**:Java作为广泛使用的编程语言,其社区发展出许多针对Java平台的设计模式实现,例如使用单例模式保证类的唯一实例,或者使用工厂模式简化对象的创建过程。 4. **体系结构**:在软件设计中,...

Global site tag (gtag.js) - Google Analytics