工厂模式分为:简单工厂方法模式,和工厂方法模式
这里我们主要介绍工厂方法模式
在简单工厂方法模式中,我们通常是在工厂中传进一个参数以决定应该使用那一个对象
比如一个人:
1,(抽象产品角色)说话(接口)
2,(具体产品角色)创建两个类实现这个接口 :a,中国人说汉语,b,英国人说英语
3,(客户端,调用实例)创建产品:创建类,并提供静态方法(注意简单工厂方法又叫静态工厂方法(static factory method)),静态方法返回一个说话的实现类。如 static creat(String speak){}
4,(工厂类角色)在工厂中调取我们需要的产品。
以上就是简单工厂方法模式的大概思路
但是他有一个问题,比如我们增加一个法语。他可以直接增加一个类即可,,但是当我们需要增加一个头发颜色。这时我们句需要更改几乎所有的类。比如接口中要增加颜色,每一个角色中也要增加颜色等等
所以工厂方法模式就出现了。我们以服装为例:服装有品牌,大小等之分。我们先写品牌
创建接口 interface Clothes { void brand(); }
创建实现类 class yishionImpl implements Clothes{ @Override public void brand() { System.out.println("创建了一件以纯品牌衣服"); } }
这里是以纯,还有其他品牌我们就不写了
这里创建调用对象接口
interface clothesFactory { Clothes creat(); }
创建以纯品牌的工厂 class yishionFactory implements clothesFactory{ @Override public Clothes creat() { return new yishionImpl(); } }其他略
//创建以纯品牌衣服 clothes = new yishionFactory().creat(); clothes.brand();
这里我们如果需要增加尺寸,我们支持衣服的尺寸不管什么品牌的衣服,他的尺寸都基本上是一样的
首先,我们从新写一个尺寸接口 ,按照品牌的方法写一整套即可,这样,我们不必去修改未来的代码,只需要扩展一套代码即可增加了这个品牌的尺寸(这里似乎又变成了抽象工厂模式)。看看我们的测试类是怎么写的:
public static void main(String[] args) { Clothes clothes = null; clothesSize cs = null; //创建以纯品牌衣服 clothes = new yishionFactory().creat(); //创建以纯品牌尺寸 cs = new yishionsizeFactory().creat(); clothes.brand(); cs.Size(); }注意上面的代码,尺寸是另外写的和品牌一模一样的代码结构。当我们不需要的时候,删掉这些代码即可,他不会印象到品牌类型代码的变化
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情