当前位置:编程学习 > JAVA >>

简单工厂模式小结

简单工厂模式预备知识
1.OO原则:
OCP原则(Open-Close-Principle开闭原则):一个软件的实体应当对扩展开放,对修改关闭。(对于一个已有的软件,如果需要扩展,应当在不需修改已有代码的基础上进行。)
 
 
2.简单工厂模式:
(1)专门定义一个类来创建其他类的实例,被创建的实例通常都有公共的父类。
(2)简单工厂模式又称为静态工厂方法,属于类的创建型模式,通常他根据自变量的不同返回不同类的实例。
(3)实质:由一个工厂类根据传入的变量,动态的决定创建出哪一个产品类的实例。
工厂角色:它负责实现所有实例内部逻辑,工厂类可以被外界直接调用,创建所需产品对象
 
 
抽象产品角色:是简单工厂所创建的所有对象的父类,描述所有实例的共有的特性
具体产品角色:简单工厂的创建目标,所有创建的对象都是这个角色的所有具体类的实例。
 
 
下面是一个简单的例子:
 
[java] 
package factory;  
public interface IFruit   
{  
    void plant();  
    void grow();  
    void harvest();  
}  
 
定义水果接口,抽象出水果的共有方法(抽象产品角色)
 
[java]  
package factory;  
  
public class Apple implements IFruit  
{  
    private int appleAge;  
    public void plant()  
    {  
        System.out.println("apple has been planted");  
    }  
  
    public void grow()   
    {  
        System.out.println("apple is growing");  
    }  
      
    public void harvest()   
    {  
        System.out.println("apple has been harvesed");    
    }  
      
    public void setTreeAge(int age)  
    {  
        this.appleAge = age;  
    }  
      
    public int getTreeAge()  
    {  
        return this.appleAge;  
    }  
}  
 
定义苹果类,继承水果接口,并全部实现水果内部的方法(具体产品角色)
 
[java] 
package factory;  
  
public class Grape implements IFruit  
{  
    boolean seedless = false;  
    public void plant()   
    {  
        System.out.println("Grape has been planted");  
    }  
  
    public void grow()   
    {  
        System.out.println("Grape is growing");       
    }  
    public void harvest()   
    {  
        System.out.println("Grape has been harvested");  
    }  
      
    public void setSeedless(boolean bb)  
    {  
        this.seedless = bb;  
    }  
      
    public boolean getSeedless()  
    {  
        return this.seedless;  
    }  
}  
 
葡萄类,同苹果。
[java]  
package factory;  
/** 
 *  
 * @author ustcqi 
 *由一个工厂类根据传入的参数,动态的决定创建哪一个产品类的实例 
 *工厂类是整个模式的关键,包含了必要的逻辑判断,根据外界给定的信息, 
 *决定究竟创建哪个具体类的对象。 
 *通过使用工厂类,外界可以从直接创建具体产品对象的局面摆脱出来 
 *仅仅负责消费对象就可以了,而不必关心这些对象是如何创建和如何组织的。 
 *有利于软件体系结构的优化 
 */  
public class Factory   
{  
    public IFruit factory(String s)  
    {  
        if(s.equals("Apple"))  
            return new Apple();  
        else if(s.equals("Grape"))  
            return new Grape();  
        else  
            System.out.println("Don't exist this fruit");  
        return null;  
    }  
}  
 
定义工厂类,用于生产水果。
[java] 
import java.util.*;  
import java.io.*;  
  
import factory.Factory;  
import factory.IFruit;  
  
public class FactoryPattern   
{  
    public static void main(String []args)  
    {  
        Factory ft = new Factory();  
        IFruit apple = ft.factory("Apple");  
        apple.grow();  
        IFruit grape = ft.factory("Grape");  
        grape.plant();  
        IFruit ff = ft.factory("dfdf");  
    }  
}  
 
最后的MAIN执行类
 
 
下面是计算器的简单工厂实现
 
抽象角色产品(操作类)
 
[java]  
package pactory;  
  
public class Operation   
{  
    private double firNum;  
    private double secNum;  
      
    public void setFirNum(double a)  
    {  
        firNum = a;  
    }  
      
    public double getFirNum()  
    {  
        return this.firNum;  
    }  
      
    public void setSecNum(double b)  
    {  
        secNum = b;  
    }  
      
    public double getSecNum()  
   
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,