设计模式-工厂模式
程序员文章站
2022-05-17 15:12:24
...
工厂模式,顾名思义就是一个工厂要能根据不同原料来生产不同的产品,我们把工厂中的生产线叫产品生产者,很明显工厂有很多的生产线,工厂会根据提供的原料,选择那条产线来生产出对应的产品。
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();
}
* 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的生产线,只要在在写一个实现方法,再在工厂类中加入。
这样我们要改动工厂类。
还有一种抽象工厂模式模式,让我们不用修改的太多。
就是将工厂抽象出一个接口,由具体的工厂类实现,生产者还是之前的实现原理,相当于我们将之前的生产线升级成一个工厂一条产线。这样我们在增加生产其他产品的时候就会在建立一个工厂,对应的在建立一条产线,不会再修改任何东西。