单例模式 简单工厂模式

本文详细介绍了单例设计模式的懒汉式和饿汉式实现,以及它们的区别。同时,探讨了工厂设计模式的核心——批量创建对象的能力,强调其公共静态方法返回接口类型的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式:解决固定问题的固定办法

单例设计模式:对外只能得到一个对象的模式

单例设计模式的实现有两种:
  1:懒汉式

class Person{
	private static  Person instance;

	private Person(){
		System.out.println("===private Person()====");
	}

	public static Person getInstance(){
		if(instance==null){
			instance=new Person();
		}

		return instance;
	}

}

            1,声明一个私有的静态的本类类型的对象;
            2,将构造函数私有化
            3,提供一个静态的公有的本类类型方法返回本类类型的对象,对1中的对象进行判断,判断值是否为空,若为空则通过new class 创建,否直接返回声明的对象;

           

  2,:饿汉式

          

class Person{
	private static final Person instance=new Person();

	private Person(){
		System.out.println("===private Person()====");
	}

	public static Person getInstance(){
		return instance;
	}


           1,声明一个私有的静态的,最终的本类类型的对象,并实例化
           2,构造函数私有化
           3,提供一个共有的静态的本类类型的方法返回本类类型的对象


 工厂设计模式:
提供批量的实例化对象的功能,且工厂中的方法都是公共的静态的返回接口类型的方法

 

interface Animal{
	void eat();
	void sleep();
	void move();
}

class Dog implements Animal{
	public void eat(){
		System.out.println("狗吃");
	}
	public void sleep(){
		System.out.println("狗睡");
	}

	public void move(){
		System.out.println("狗动");
	}

	public void lookHouse(){
		System.out.println("狗看门");
	}
}

class Wolf implements Animal{
	public void eat(){
		System.out.println("狼吃");
	}
	public void sleep(){
		System.out.println("狼睡");
	}

	public void move(){
		System.out.println("狼动");
	}

	public void shout(){
		System.out.println("狼嗷嗷叫");
	}
}

/**
  * 工厂类的主要职责:生产对象
*/
class SimpleFactory{
	/**
	  * 工厂中的方法都是公共的静态的返回接口类型的方法
	*/
	public static Animal getInstance(String type){
		if("dog".equals(type)){
			return new Dog();
		}else if("wolf".equals(type)){
			return new Wolf();
		}else {
			System.out.println("无效的类型");
			return null;
		}
	}




	static void print(Animal al){
		if(al!=null){
			al.eat();
			al.sleep();
			al.move();

			if(al instanceof Dog){
				Dog dog=(Dog)al;
				dog.lookHouse();
			}else if(al instanceof Wolf){   //判断是否是由子类上转型转换过来的
				Wolf wolf=(Wolf)al;     //下转型转换为子类对象,调用子类新的方法
				wolf.shout();
			}
		}
		
	}


	static void exe(){
		Animal dog=SimpleFactory.getInstance("dog");
		Animal wolf=SimpleFactory.getInstance("wolf");

		Animal al=SimpleFactory.getInstance("fox");


		SimpleFactory.print(dog);
		SimpleFactory.print(wolf);
		SimpleFactory.print(al);
	}

}

public class TestSimpleFactoryDemo08{
	public static void main(String[] args){
		/*Animal dog=new Dog();
		dog.eat();
		dog.sleep();
		dog.move();

		Animal wolf=new Wolf();
		wolf.eat();
		wolf.sleep();
		wolf.move();*/

		/*
		Animal dog=new Dog();
		Animal wolf=new Wolf();

		print(dog);
		print(wolf);
		*/

		
		SimpleFactory.exe();   //全部

	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值