关闭

单例模式 简单工厂模式

标签: 工厂模式设计模式单例模式
67人阅读 评论(0) 收藏 举报
分类:
设计模式:解决固定问题的固定办法

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

单例设计模式的实现有两种:
  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();   //全部

	}
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1360次
    • 积分:141
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条