5.28简单工厂模式

测试类

package org.westos.常用的设计模式.简单工厂模式;
//这是一个简单工厂模式的测试类
/**
 * 简单工厂模式:
 * 优点:
 * 		不需要再创建具体的对象,把创建的工作交给了工厂类(这个类私有化了构造方法,所提提供的方法为静态方法,调用使用类名.方法名)
 * 缺点:
 * 		如果有新的类增加,构造方法不同,就需要去修改工厂类,不符合设计原则开闭原则
 * */
public class Demo {
	public static void main(String[] args) {
		
		Animal cat = AnimalFactory.createAnimal("Cat");
		cat.eat();
		Animal dog = AnimalFactory.createAnimal("Dog");
		dog.eat();
		System.out.println("----------------");
	
		
		
		Animal a = AnimalFactory.createAnimal("Cat");
		a.eat();
		a = AnimalFactory.createAnimal("Dog");
		a.eat();
		a = AnimalFactory.createAnimal("Pig");
		if(a!=null) {
			a.eat();
		}else {
			System.out.println("工厂类不提供该类");
		}
	}
}

抽象类

package org.westos.常用的设计模式.简单工厂模式;
//这是一个抽象类,提供了一个Animal类
public abstract class Animal {
	//这是抽象类Animal的共有功能
	public abstract void eat();
}

具体类

package org.westos.常用的设计模式.简单工厂模式;
//这是一个具体类猫,继承了Animal类
public class Cat extends Animal {
	//重写Animal类的抽象方法
	@Override
	public void eat() {
		System.out.println("猫吃鱼");
	}

}
package org.westos.常用的设计模式.简单工厂模式;
//这是一个具体类狗,继承了Animal类
public class Dog extends Animal {
	//重写Animal类的抽象方法
	@Override
	public void eat() {
		System.out.println("狗吃骨头");
	}

}

工厂类

package org.westos.常用的设计模式.简单工厂模式;
//这是一个工厂类,用来创建各种具体类的对象
//采用的是多态的方式,Animal 对象名 = new 具体类();
public class AnimalFactory {
	private AnimalFactory(){}
	public static Animal createAnimal(String str) {
		if(str.equals("Cat")) {
			return new Cat();
		}else if(str.equals("Dog")) {
			return new Dog();
		}
		return null;
	}
}


猜你喜欢

转载自blog.csdn.net/ws1995_java/article/details/80542647
今日推荐