简单理解工厂设计模式----Factory

        工厂设计模式是java开发中使用最多的设计模式。

        观察下面的代码,思考有什么问题:

interface Fruit {     //定义接口
	public void eat();
} 
class Apple implements Fruit {  //实现接口
	public void eat() {
		System.out.println("吃苹果。");
	}
}
class Orange implements Fruit {
	public void eat() {
		System.out.println("吃橘子。");
	}
}
class Banana implements Fruit {
	public void eat() {
		System.out.println("吃香蕉。");
	}
}
public class test {
	public staitc void main(String args[]) {
		Fruit f = new Apple(); //实例化接口的子类为接口实例化
		f.eat();
	}
}

        本程序通过实例化接口的子类为接口实例化,但是这种操作有一些问题。我们把主类、主方法看作客户端,客户端操作应该为用户提供便利。但是上段代码中,接口实例化了一个固定的类。当我要使用香蕉类中的eat()方法时,要对客户端中的代码进行较大改动。代码将 Fruit-->Apple 强行绑定在一起。代码耦合度有点高。

        我们寻求一种更好的方法解决这种问题。 于是有了工厂设计模式即Fruit-->factory-->Apple,这样当水果变化时,通过工厂发生相应的改变,Fruit可以不变。降低了程序的耦合性,实现了代码的可移植性。修改后的代码如下:

interface Fruit {     //定义接口
	public void eat();
} 
class Apple implements Fruit {  //实现接口
	public void eat() {
		System.out.println("吃苹果。");
	}
}
class Orange implements Fruit {
	public void eat() {
		System.out.println("吃橘子。");
	}
}
class Banana implements Fruit {
	public void eat() {
		System.out.println("吃香蕉。");
	}
}
class Factory {
	public staitc Fruit getInstance(String className) {
		if(Apple.equals("className")){
			return new Apple();
		}
		if(Apple.equals("className")){
			return new Orange();
		}
		if(Apple.equals("className")){
			return new Banana();
		}
		return null;
	}
}

public class test2 {
	public static void main(String[] args) {
		Fruit f = Factory.getInstance("Apple");//通过工厂产生APPLE类,当修改水果时只需要修改getInstance()方法中的参数。
		f.eat();

	}
}

        当遇到某些题目让实现一个就简单的工厂设计模式时,上述代码足以应付。对于这个设计模式还需要见识更多问题,更多代码。


猜你喜欢

转载自blog.csdn.net/bingocoder/article/details/80172757