简介单例模式(静态工厂模式)和工厂模式

  • 单例模式就是保证系统中这个对象只有一个实例

什么是单例模式?

      单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

1、一个单例模式的要求有三点:

1)私有的变量

2)私有的构造函数

3)公有的方法,返回一个实例对象

2、实现单例的方式(举例)

1)饿汉模式:饿汉式单例在类加载初始化时就创建好一个静态的对象供外部使用,除非系统重启,这个对象不会改变,所以本身就是线程安全的

/**
	 * 饿汉模式
	*/
	//私有的变量
	private static Singleton singleton=new Singleton();
	//私有的构造函数
	private Singleton() {}
	//公有的方法,返回一个实例对象
	public static Singleton getInstance() {
		System.out.println("111");
		return singleton;
	}

 2)懒汉模式(延迟式)

/**
	 * 懒汉模式
	 */
        //私有的变量
	private static Singleton singleton1=null;
        //私有的构造函数
	private Singleton() {}
        //公有的方法,返回一个实例对象
	public static Singleton getInstance1() {
		if(null==singleton1) {
			singleton1=new Singleton();
		}
		return singleton1;
	}

但在多线程环境下会产生多个single对象,解决办法:使用synchronized同步锁(synchronized方法和代码块)。

3)应用

        网站计数器。当有用户访问时计数器+1,并能获取当前的访问个数。

        该需求我们需要用单例模式,保证所有用户操作的数据都是同一个数据;

a.如果非单例模式结果是我们想要的吗??

 

b.添加上单例的结果:

 

4)单例的应用

spring中管理的bean对象默认就是单例的。

 

  • 工厂模式

1、什么是工厂模式

            工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。

     为什么要用工厂模式?

            以汽车为例,在现实社会中会有一个汽车工厂,通过这个工厂我们可以生产中各种类型的车,小轿车,越野车,吉普车等等。对应到我们的工厂模式,汽车工厂就是我们的工厂,汽车就是我们要实例化的对象。

2、工厂模式有简单工厂模式,工厂方法模式,抽象工厂模式

   我们用UML的类图来讲解工厂模式的三种实现方法

   UML是统一建模语言,UML主要使用图形符号来表示软件项目的设计,使用UML可以帮助项目团队沟通、探索潜在的设计和验证软件的架构设计。

参考地址:

https://www.visual-paradigm.com/cn/guide/uml-unified-modeling-language/what-is-uml/

UML的类图描述了系统中对象的类型以及它们之间存在的各种静态关系。

免费在线制图的地址参考:https://www.processon.com/,可以画这种UML图

UML类图的三种关系:

1)

2)关联关系

A关联B,在A类中有一个B类的对象属性;Zoo关联Monkey,因为在Zoo动物园中有Monkey的实例变量;

3)依赖关系

A依赖到B,在A的某个方法中使用到了B。人People依赖食物Food

3、简单工厂模式

1).既然要造车我们给他一个接口ICar,有一个make方法

2).Jeep,RaceCar,SportsCar实现ICar接口,分别生产吉普车,赛车,跑车

3).创建一个简单工厂类SimpleCarFatory,有一个方法makeCar,可以根据字符串“jeep”“raceCar”,“sportsCar”生产出不同的车;

4).每个用户可以从工厂中得到自己的产品;

 

5).优缺点:


优点:简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。

           明确区分了各自的职责和权力,有利于整个软件体系结构的优化。

缺点:

           1 扩展性差(我想增加一种车,除了新增一个车的产品类,还需要修改工厂类方法)

           2 生产不同产品时,需要额外的字符串参数的支持。

4、工厂方法模式

提供一个工厂接口,让其实现类(工厂实现类)决定实例化哪一个类(产品类),并且由该实现类创建对应类的实例。

好处:增加一个车,只需要增加车的工厂类和产品类两个类,不需要修改其它的工厂类。

缺点:增加车类,会修改客户端代码,工厂方法只是把简单工厂的内部逻辑判断移到了客户端进行。

5、抽象工厂模式

抽象工厂模式和工厂方法模式很相似,但是一个具体工厂可以制造几个产品,是对一组具有相同主题的工厂进行封装。

参考地址:

https://www.cnblogs.com/zailushang1996/p/8601808.html

猜你喜欢

转载自blog.csdn.net/qq_43154385/article/details/87349389