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

什么是简单工厂模式

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

 

简单工厂模式的角色

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

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

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

../_images/SimpleFactory.jpg

 

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

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语句),不能很好体现开闭原则(即软件升级时应该通过扩展方式(添加新类、接口)实现,而不应该更改已有类的代码或是向已有类中插入代码),简单工厂模式应该适用于产品不多的情况,否则工厂类可能十分臃肿

 

参考资料:http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/simple_factory.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值