单例模式,工厂模式

单例模式的定义

单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。

在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应用程序的日志对象、数据库的连接池、网站的计数器、Web 应用的配置对象、应用程序中的对话框、系统中的缓存等常常被设计成单例。

单例模式有 3 个特点:
单例类只有一个实例对象;
该单例对象必须由单例类自行创建;
单例类对外提供一个访问该单例的全局访问点;
单例模式的结构与实现
单例模式是设计模式中最简单的模式之一。通常,普通类的构造函数是公有的,外部类可以通过“new 构造函数()”来生成多个实例。但是,如果将类的构造函数设为私有的,外部类就无法调用该构造函数,也就无法生成多个实例。这时该类自身必须定义一个静态私有实例,并向外提供一个静态的公有函数用于创建或获取该静态私有实例。

单例模式的实现
public class Student {
	//饿汉模式 优点:开始节约了一块存储空间,随着次数越用越多,会降低效率
	//private static Student s=new Student();
	//懒汉模式
	private static Student s;
	//私有化构造函数
	//直接导致外界无法使用
	private Student(){
		
	}

	public static Student getStudent(){
			if (s==null) {
				s=new Student();
			}
		return s;
	}
}
public class test {
	Student student= Student.getStudent();
	Student student2=Student.getStudent();
}

工厂模式

工厂模式:工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
实例化对象的时候不再使用 new Object()形式,可以根据用户的选择条件来实例化相关的类。对于客户端来说,去除了具体的类的依赖。只需要给出具体实例的描述给工厂,工厂就会自动返回具体的实例对象。

具体实现如下:

  1. 定义一个操作接口:

public interface Animal {
	//动物都有吃东西的方法
	public void eat();
}
package FactoryTon;

public class Cat implements Animal {

	public void eat() {
		System.out.println("猫吃鱼");
		
	}

}
package FactoryTon;

public class Dog implements Animal{

	public void eat() {
		
		System.out.println("狗吃猫");
	}

}
package FactoryTon;

public class Facoty {
	public Animal getAnimal(String name){
		if("猫".equals(name)){
			return new Cat();
		}else if ("狗".equals(name)) {
			return new Dog();
		}else {
			return null;
		}
	}
}	

调用

package FactoryTon;

public class test {
	public static void main(String[] args) {
		Facoty fa=new Facoty();
		Animal an=fa.getAnimal("猫");
		an.eat();
		Animal an1=fa.getAnimal("狗");
		an1.eat();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值