我们先从优缺点来说:
优点:工厂类是整个模式的关键。包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的。明确了各自的职责和权利,有利于整个软件体系结构的优化。
缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
//产品抽象类接口
interface Human{
public abstrace void say();
}
//然后定义男人和女人,同样都有说话的方法。
class Man implements Human{
@Override
public void say() {
System.out.println("男人");
}
}
class Woman implements Human{
@Override
public void say() {
System.out.println("女人");
}
}
//最后写一个工厂类,用来创造男人和女人。第一种方式是使用逻辑判断的方式实现的。
class SampleFactory {
public static Human makeHuman(String type){
if (type.equals("man")){
Human man=new Man();
return man;
}else if (type.equals("woman")){
Human woman=new Woman();
return woman;
}else {
System.out.println("生产不出来");
return null;
}
}
}
//第二方式是使用java的反射实现的,我觉得这一类的实现方式比较好。
class SamoleFactory1{
public static Human makeHuman(Class c){
Human human=null;
try {
human= (Human) Class.forName(c.getName()).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return human;
}
}
public class FactoryMode {
public static void main(String[] args){
// Human man=SampleFactory.makeHuman("man");
// man.say();
// Human woman=SampleFactory.makeHuman("woman");
// woman.say();
Human human=SamoleFactory1.makeHuman(Man.class);
human.say();
Human woman=SamoleFactory1.makeHuman(Woman.class);
woman.say();
}
}
本文深入探讨了工厂模式的优点和缺点,详细介绍了如何通过工厂类创建不同类的对象,避免了直接实例化,实现了对象创建的解耦。并通过代码示例展示了两种实现方式:逻辑判断和Java反射。
1518

被折叠的 条评论
为什么被折叠?



