设计模式系列(二)工厂模式

来源:互联网 发布:linux如何切换账户 编辑:程序博客网 时间:2024/06/07 09:47

来来来,工厂模式!

需求:我们需要一个共享女友,这个女女可能是温柔的,也可能是彪悍的也可能是其他各种各样的

看到这个需求相信很多人会觉得直接new出来不就好了么,刚开始LZ也这样认为,但是自从学了工厂模式以后我就再也不那样写了。首先,工厂模式,仍然是望名思意,不就是一个大工厂么,对就是一个负责生产产品的工厂而已。

先来一个简单的实例:

public  interface Girl {public void say();}public class Girl1 implements Girl {public void say(){System.out.println("人家很温柔的哦");}}public class Girl2 implements Girl {public void say(){System.out.println("你瞅啥,不服是吧!");}}
有一个女孩的接口,她有一个说的方法。他的两个实现类分别说出了自己的性格,一个是温柔的,一个是彪悍的。虽然我们可能都喜欢温柔的,但是不排除有人喜欢彪悍的么,既然客户有这样的需求那么我们就得为客户提供一个女女工厂,他可以根据你的需求来生产你需要的女女
public class GirlFactory {/** *  * @param type * @return根据传来的类型返回同类型的女孩 */public static Girl getGirl(String type){Girl girl=null;switch (type) {case "温柔":girl=new Girl1();break;case "彪悍":girl=new Girl2();break;default:System.out.println("暂时还没有这种类型的女女哦。。。。。。。。。。。");break;}return girl;}}
这样的话作为客户他需要关心的只是在调用这个getGirl方法时传一个需要的类型type就行了

public class Main {public static void main(String[] args) {//简单工厂测试Girl girl1=GirlFactory.getGirl("温柔");girl1.say();Girl girl2=GirlFactory.getGirl("彪悍");girl2.say();}}
就这样一个简单的工厂模式就这样OK了,是不是特别简单啊,不过这个还是有点小瑕疵,假如客户需要不属于以上两种类型,我们就需要再修改switch里的代码,这样就不符合我们的对修改关闭的原则了,于是又出现了一种抽象工厂模式:

同样的Girl接口,Girl1、Girl2实现类这里就不贴了,于简单工厂不同的是抽象工厂提供一个抽象的工厂接口,她对外暴露了创建不同女女的方法,同理如果某些人有特殊癖好,我们也可以提供一个ManFactoryInterface来提供男男的服务么

public interface GirlFactoryInterface {public Girl1 createSoftGirl();public Girl2 createDoughtyGirl();}

public class GirlFactoryImpl implements GirlFactoryInterface {@Overridepublic Girl1 createSoftGirl() {return new Girl1();}@Overridepublic Girl2 createDoughtyGirl() {return new Girl2();}}
客户使用的时候只需要调用接口对外提供的方法就可以了

public class Main {public static void main(String[] args) {// 抽象工厂模式GirlFactoryInterface girlFactory = new GirlFactoryImpl();Girl girl1 = girlFactory.createSoftGirl();girl1.say();Girl girl2 = girlFactory.createDoughtyGirl();girl2.say();}}

在此奉上源码一份

好了,到此一个工厂模式的简单小例子就写完了,小伙伴们,你们get到了么?


原创粉丝点击