设计模式——简单工厂模式

什么是简单工厂模式

把实例化对象的责任交给一个特定的类负责,这个类就是工厂类,客户端将自己所需要的对象告诉工厂类,工厂类返回客户端所需要的对象。

简单工厂模式的角色

Factory:工厂类,负责实例化对象并返回

Product:抽象接口类,定义一组产品共同的行为

ConcreteProduct:具体产品类,用于实现具体的产品行为

设计模式——简单工厂模式

下面我们简单实现一个实例,工厂有雷神和火麒麟两种武器,客户可以要求工厂生产这两种武器,客户可以选择购买这两样武器

Product接口:

package simplefactory;
 
/**
 *
 * @author lzy
 */
public interface Product {
    void buy();
}

Fire_kirin类:

package simplefactory;
 
/**
 *
 * @author lzy
 */
public class Fire_kirin implements Product{
    
    private final float price=88800;
    //枪械的威力
    private final float power=40;
    //枪械的重量
    private final float weight=40;
 
    public float getPrice() {
        return price;
    }
 
    public float getPower() {
        return power;
    }
 
    public float getWeight() {
        return weight;
    }
 
    @Override
    public void buy() {
        System.out.println("成功购买火麒麟,贪玩穿越,用薪创造快乐");
    }   
}

Thor类:

package simplefactory;
 
/**
 *
 * @author lzy
 */
public class Thor implements Product{
    private final float price=88800;
    //枪械的威力
    private final float power=40;
    //枪械的重量
    private final float weight=40;
 
    public float getPrice() {
        return price;
    }
 
    public float getPower() {
        return power;
    }
 
    public float getWeight() {
        return weight;
    }
 
    @Override
    public void buy() {
        System.out.println("成功购买雷神,贪玩穿越,用薪创造快乐");
    }
}

SimpleFactory类:

package simplefactory;
 
/**
 *
 * @author lzy
 */
public class SimpleFactory {
 
     public static Product getProduct(String str){
         
         if(str.equals("0001"))
             return new Fire_kirin();
         else if(str.equals("0002"))
             return new Thor();
     }
    
}

main函数:

package simplefactory;
 
public class main {
    public static void main(String[] args)
      {
            Product A=SimpleFactory.getProduct("0001");
            A.buy();
            
            Product B=SimpleFactory.getProduct("0002");
            B.buy();
            
            System.out.println("恭喜你,又变强了");
      }
}

执行结果:
设计模式——简单工厂模式

简单工厂模式的一点思考

优点:

客户端不需要记忆类名,只要输入产品代号,就可以获得自己想要的商品,通过Product接口使代码结构更加清晰,向客户隐藏了产品细节,客户端只看到返回了Product类型,但不知道商品对应的具体类,具有一定的封装性

缺点:

简单工厂模式本身不易于扩展,每增加一类商品,就要实现一个产品类,同时要更改工厂方法,最终工厂方法可能变得十分臃肿(一坨if、else语句),不能很好体现开闭原则(即软件升级时应该通过扩展方式(添加新类、接口)实现,而不应该更改已有类的代码或是向已有类中插入代码),简单工厂模式应该适用于产品不多的情况,否则工厂类可能十分臃肿