Java设计模式之三:工厂方法模式

来源:互联网 发布:惠州网络英才网 编辑:程序博客网 时间:2024/06/05 16:57

由于之前一直在看并发编程的书籍,好几天没写设计模式的博文了(虽然已经实现了,但是懒)

之前写了简单工厂模式,简单工厂模式本质就是根据传入的字符串进行对象的创建,但是这违反了开闭原则:对扩展开放,对修改封闭。假设我们有新的对象添加,那么势必需要在工厂类的静态方法中添加case,所以才有了工厂方法模式。

工厂方法模式

这边我尽量用简单点的方式进行讲解,UML图就不画了,俺的机子太差,没装rational rose,用其他的工具却又不习惯,见谅!!!。

第一步:创建Thing抽象类或者接口都可以。

                不过这里还是创建抽象类比较好,因为抽象类是对事物的抽象化,就像动物可以抽象。而接口是对行为的规范,所以接口里只有常量和抽象方法,而抽象类还有属性,非抽象方法等。

第二步:创建衣服类(Cloth)继承Thing,创建Shirt类继承Thing,给字段赋值(这边没用get,set,C#中是叫字段的,可能Java中叫做变量吧)。

第三步:创建抽象工厂类(AbstractFactory),定义produceThing()方法。

第四步:创建衣服工厂类(Clothfactory),实现抽象类的抽象方法;创建shirt工厂类(shirtfactory),实现抽象类的抽象方法;

第五步:在客户端中创建你需要的工厂类,工厂类产生对象。

代码处:

public abstract class Thing {public String name;}
public class Cloth extends Thing{public Cloth(){this.name="衣服";}}
public class Shirt extends Thing{public Shirt(){this.name="T恤";}}
public abstract class AbstractFactory {public abstract Thing produceThing();}
public class ClothFactory extends AbstractFactory{public Thing produceThing(){return new Cloth();}}
public class ShirtFactory extends AbstractFactory{@Overridepublic Thing produceThing() {return new Shirt();}}
public void test() {AbstractFactory factory=new ClothFactory();Thing thing=factory.produceThing();System.out.println(thing.name);}


这边如果需要添加鞋子对象的话,不必像简单工厂模式那样去工厂类中修改,只需要创建对象继承Thing,接着去创建工厂类继承抽象工厂类,接着就能用工厂创建对象了,实现了开闭原则。

但是相信大家也看出来了,工厂方法模式,创建一个对象,需要添加一个类继承父类,同时还需要创建工厂类,如果有很多产品呢,比如说衣服中就有很多类型的衣服,难道一个个都去创建工厂吗。

所以对于单一产品可以使用工厂方法模式,而对于结构化的产品,则需要抽象工厂模式了。

明天再写,看书去了,最后忍不住想谈几句,现在Java实习工作感觉是真的难找,小公司需要有项目经验,他们没这么多时间去培养你,最好是一入职就直接开干,外包公司就更不用说了。上次去杭州面试,全都是小公司,因为才大三加上前两年学的是前端和.net,项目么也就ssh,ssm,javase的几个项目,最好的也就是用爬虫实现数据的爬取,mybatis实现数据保存和ssm实现web的在线阅读小说网站。

感觉笔试做的很好,但是还是被pass了,后来的一家公司两次电话面试都还不错,现场面试给了我一个大难题:让我设计12306购票系统,多少亿的项目啊,让我一个大三的想,反正我是想不出来,然后又被pass,还有sql语句是非常重要的,像查找重复记录几乎是必考的,还有嵌套查询,表的内连接和外连接,MySQL存储引擎和索引估计是厉害点的公司必考的吧(我也不确定)。

如果想进大公司,基础必须特别扎实,像bat哪一个进去的校招生不是项目和基础特别屌的,唉,真的难啊!!!