设计模式-工厂模式

工厂模式,顾名思义就是一个工厂要能根据不同原料来生产不同的产品,我们把工厂中的生产线叫产品生产者,很明显工厂有很多的生产线,工厂会根据提供的原料,选择那条产线来生产出对应的产品。

 

1.首先所有的生产线都有一个公用方法那就是生产动作,我们写接口

/**
* Created with IntelliJ IDEA.
* User: hank
* Date: 2016/5/26
* Time: 11:22
* 生产类接口 ”生产出各种类型的产品“
* To change this template use File | Settings | File Templates.
*/
public interface Productor {
/**
* 生产方法
*/
public void product();
}

 2.实现生产接口,因为我们要生产不同的产品

/**
 * Created with IntelliJ IDEA.
 * User: hank
 * Date: 2016/5/26
 * Time: 11:25
 * 生产TV 的生产者
 * To change this template use File | Settings | File Templates.
 */
public class TVProductor implements Productor {
    @Override
    public void product() {
        System.out.println("TVProductor.product===>生产TV");
    }
}
/**
 * Created with IntelliJ IDEA.
 * User: hank
 * Date: 2016/5/26
 * Time: 11:25
 * 生产PC的生产者
 * To change this template use File | Settings | File Templates.
 */
public class PCProductor implements Productor {
    @Override
    public void product() {
        System.out.println("PCProduct.product===>生产PC");
    }
}

 3.写工厂类:

/**
 * Created with IntelliJ IDEA.
 * User: ${xiangdong.he}
 * Date: 2016/5/26
 * Time: 11:27
 * 工厂会根据提供的原料“strType”,自助选择那条产线来生产,来生产出对应的产品
 */
public class ProductorFactory {
    public Productor getProductor(String strType){
        if("TV".equals(strType)){
            return new TVProductor();
        }else if("PC".equals(strType)){
            return new PCProductor();
        }else{
            System.out.println("对不起!我们工厂不能生产这种产品!~");
            return null;
        }
    }
}

 这样我们就会有“工厂了”,根据我们自己的实力,依来源材料来做各种不同的产品。

再比如我们的客户不知道我们自己能生产什么,突然送过来原材料让我们生产我们无法生产的产品那就只能说System.out.println("对不起!我们工厂不能生产这种产品!~");

那我们优化下给我们的工厂打广告告知大众能生产什么.

改写工厂类的方法:

    public PCProductor getPcProductor(){
        return new PCProductor();
    }
    
    public TVProductor getTvProductor(){
        return new TVProductor();
    }

 这样我们就告诉客户我们只生产这两种类型的产品。

test:

public class MyTest {
    public static void main(String[] args) {
        //1.
        //实例化工厂
        ProductorFactory pf = new ProductorFactory();
        //获得工厂具体的生产者
        Productor p =  pf.getProductor("TV");
        //生产者生产
        p.product();

        //2.
        //获得工厂具体的生产者
        PCProductor pcpd = pf.getPcProductor();
        pcpd.product();
    }

}

显然第二种我们不会犯加工不得错误

这样如果我们有钱了在添加一条生产DV的生产线,只要在在写一个实现方法,再在工厂类中加入。

这样我们要改动工厂类。

还有一种抽象工厂模式模式,让我们不用修改的太多。

就是将工厂抽象出一个接口,由具体的工厂类实现,生产者还是之前的实现原理,相当于我们将之前的生产线升级成一个工厂一条产线。这样我们在增加生产其他产品的时候就会在建立一个工厂,对应的在建立一条产线,不会再修改任何东西。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值