黑马程序员技术交流社区

标题: 有谁知道工厂模式啊 [打印本页]

作者: 朱皓    时间: 2012-2-25 09:55
标题: 有谁知道工厂模式啊
有谁知道工厂模式啊
作者: 温昌寿    时间: 2012-2-25 20:48
工厂模式按照《Java与模式》中的提法分为三类: 1. 简单工厂模式(Simple Factory) 2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象,并且更具一般性。所以我建议在这种情况下使用简单工厂模式与工厂方法模式相结合的方式来减少工厂类:即对于产品树上类似的种类(一般是树的叶子中互为兄弟的)使用简单工厂模式来实现。来看看抽象工厂模式的各个角色(和工厂方法的如出一辙): 抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关。

工厂模式有三个参与者,抽象产品(Product)、工厂(Creator)和具体产品(ConcreteProduct)。客户只会看到工厂和抽象产品。

public interface Product{
public String getName();
}

public class ConcreteProduct implements Product{
public String getName(){
return "产品1";
}
}

public class Creator{
public static Product create1(){
return new ConcreteProduct();
}
}

工厂模式的作用在于将创建具体产品的方法由工厂类控制,客户只需要知道产品的抽象类型
作者: 黄方    时间: 2012-2-25 21:15
工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。

作者: 杨盼    时间: 2012-2-25 21:57
程序在接口和子类之间加入一个过渡端,通过此过渡端取得接口的实例化对象,这个过渡端就是工厂类,这种思想就是工厂模式,下面一个简单例子可以看看
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 Factory{        // 定义工厂类
        public static Fruit getInstance(String className){
                Fruit f = null ;
                if("apple".equals(className)){        // 判断是否要的是苹果的子类
                        f = new Apple() ;
                }
                if("orange".equals(className)){        // 判断是否要的是橘子的子类
                        f = new Orange() ;
                }
                return f ;
        }
};
public class InterfaceCaseDemo05{
        public static void main(String args[]){
                Fruit f = Factory.getInstance(args[0]) ;        // 实例化接口
                if(f!=null){        // 判断是否取得实例
                        f.eat() ;
                }
        }
};




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2