1.
简单工厂模式是属于创建型模式,又叫做静态工厂方法模式。
它的实现方式是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
2.
简单工厂模式由三种角色组成:
(
1
)工厂角色:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。
(
2
)抽象产品角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
(
3
)具体产品角色:是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
例如以下实例:
生产水果,此时,为水果类声明了一个接口:
package
co.xiaowenzi.study;
public interface
Fruit {
//
送给客户
void
send();
}
定义水果种类:苹果和香蕉
package
co.xiaowenzi.study;
public class
Apple
implements
Fruit {
@Override
public void
send() {
System.
out
.println(
"
苹果
准备好了
"
);
}
}
package
co.xiaowenzi.study;
public class
Banana
implements
Fruit {
@Override
public void
send() {
System.
out
.println(
"
香蕉准备好了
"
);
}
}
根据需求生产的工厂:
package
co.xiaowenzi.study;
public class
FruitFactory {
/**
*
水果工厂,等待客户下单进行生产
*
@param
which
*
@return
*
@throws
Exception
*/
public static
Fruit factory(String
which
) {
//
利用反射来知道那种水果
Fruit
fruit
=
null
;
try
{
fruit
= (Fruit) Class.
forName
(
"co.xiaowenzi.study."
+
which
).newInstance();
}
catch
(InstantiationException
e
) {
//e.printStackTrace();
}
catch
(IllegalAccessException
e
) {
//e.printStackTrace();
}
catch
(ClassNotFoundException
e
) {
//e.printStackTrace();
}
return
fruit
;
}
}
客户下单,通知工厂生产:
package
co.xiaowenzi.study;
public class
FruitCustomer {
@SuppressWarnings
(
"static-access"
)
public static void
main(String[]
args
){
//
客户下单香蕉,通知工厂生产
FruitFactory
fruitFactory
=
new
FruitFactory();
Fruit
fruit
=
fruitFactory
.
factory
(
"canana"
);
if
(
fruit
!=
null
){
fruit
.send();
}
else
{
System.
out
.println(
"
没有
这种水果
"
);
}
}
}