package 简单工厂模式;
public void show();
}
class Banana implements Fruit {
public void show() {
System.out.println("我是香蕉");
}
}
class Apple implements Fruit {
public void show() {
System.out.println("我是苹果");
}
}
class FruitFactory {
public static Fruit FRUIT=null;
if(name.equalsIgnoreCase("apple")){
FRUIT=new Apple();
}else if(name.equalsIgnoreCase("banana")){
FRUIT= new Banana();
}
return FRUIT;
}
//02
/*public static Fruit getInstance(String name){
Fruit fruit=null;
try {
Class class1=Class.forName(name);
fruit=(Fruit) class1.newInstance();
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (InstantiationException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return fruit;
}*/
}
public class SingleDemo {
public static void main(String[] args) {
//Fruit fruit=FruitFactory.getInstance("Apple");
Fruit apple=FruitFactory.getInstance("Apple");
apple.show();
Fruit banana=FruitFactory.getInstance("banana");
banana.show();
}
}
//简单工厂模式的优缺点:
优点:工厂类是整个模式的关键所在。包含基本上的判断逻辑,能够根据外界给定的信息来决定,应该创建那个具体类对象,用户在使用的时候可以直接根据工厂类去创建所需要的实例,而不用去了解对象本身是如何创建的,如何组织的。相对于客户是透明的 客户只需要了解工厂创建类的功能就可以。
缺点:正好体现在工厂类上,工厂类上集中了所有实例的创建逻辑 。所以在高内聚方面做的不好。当系统中具体产品增加的时候,也会出现对于工厂类的相应的修改。对于用户的友好程度不太好。方法2对于扩展性好 方法1对于适用性好。
public void show();
}
class Banana implements Fruit {
public void show() {
System.out.println("我是香蕉");
}
}
class Apple implements Fruit {
public void show() {
System.out.println("我是苹果");
}
}
class FruitFactory {
public static Fruit FRUIT=null;
// 01
public static Fruit getInstance(String name){if(name.equalsIgnoreCase("apple")){
FRUIT=new Apple();
}else if(name.equalsIgnoreCase("banana")){
FRUIT= new Banana();
}
return FRUIT;
}
//02
/*public static Fruit getInstance(String name){
Fruit fruit=null;
try {
Class class1=Class.forName(name);
fruit=(Fruit) class1.newInstance();
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (InstantiationException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return fruit;
}*/
}
public class SingleDemo {
public static void main(String[] args) {
//Fruit fruit=FruitFactory.getInstance("Apple");
Fruit apple=FruitFactory.getInstance("Apple");
apple.show();
Fruit banana=FruitFactory.getInstance("banana");
banana.show();
}
}