设计模式笔记之----工厂模式

咳咳,今天继续学习设计模式中的工厂模式。那么工厂模式是为了创建和调用相分离的(new的过程在工厂类,调用者只要调用工厂方法声明去创造就行了),主要是为了创建一个产品的不同方式封装。主要有下面3个类型:
1.简单工厂模式
2.工厂方法模式
3.抽象工厂模式

简单工厂

应该是用的最多,并且也是最简单的模式,只需要把对象生成的方法放在一个工厂类就行了,比如我们android开发的bitmapFactory,为生成bitmap对象封装了一个工厂,我们只需要通过工厂类直接调用就好了,自己也写了一个简单的例子,通过factory创建不同类型的CPU:

package FactoryPattern;

public class SimpleFactory {

    public static void main(String[] args){
        CpuInterface cpu = SimpleFactory.createCpu();
        CpuInterface cpu2 = SimpleFactory.createSuperCpu();
    }

    public static Cpu createCpu(){
        return new Cpu();
    }

    public static SuperCpu createSuperCpu(){
        return new SuperCpu();
    }
}

工厂方法模式

这个用得比较少,用得多的是简单工厂模式。但是工厂方法模式是更加灵活的,要先把工厂方法抽象成接口,然后每个类型的产品都需要一个创建工厂(实现工厂接口)。
使用的时候是这样的:

package FactoryPattern;

public class main {

    public static void main(String[] args){
        Cpu cpu = new CpuFactory().createCpu();
        SuperCpu superCpu = new SuperCpuFactory().createCpu();
    }
}

然后CpuFactory和SuperCpuFactory都分别是创建Cpu 和SuperCpu 分别定义的工厂类,他们都是含有createCpu()方法接口的子类:

package FactoryPattern;

public interface CpuFactoryInf {

    CpuInterface createCpu();
}

抽象工厂模式

抽象方法在我看来其实就是高级一点的工厂方法,具有抽象的工厂方法接口。抽象工厂网上很多说是创建一个产品簇,产品簇其实是一个含有多个原件组成的产品类型,比如汽车,无论是什么汽车他们的原件都一样,都有发送机,轮胎,座椅等等,但是有好车,有低价位车,唯一区别就是原件类型不同,所以抽象工厂模式是创建不同原料组成的产品类型,也就是产品簇,类似一个品牌的手机,有高端机,低端机。

这里练习的例子是组装手机,目录如下:
设计模式笔记之----工厂模式_第1张图片

我需要创造两个手机,一个huawei,一个xiaomi,于是定义制造手机的接口:

package FactoryPattern.FactoryAbs;

import FactoryPattern.FactoryAbs.cpu.CpuInf;

public interface MobilePhoneInf {

    void call();

    void setCpu(CpuInf cpu);

    void setMemory(Memory memory);
}

然后定义配件,只定义了cpu、memory,其中cpu分为普通cpu和cpu_hi(华为自己的cpu),然后定义一个工厂接口:

package FactoryPattern.FactoryAbs.factory;

import FactoryPattern.FactoryAbs.MobilePhoneInf;

public interface MobileFactory {

    MobilePhoneInf createPhone();
}

于是华为手机有华为手机自己的工厂,小米有小米的工厂,每个工厂的createPhone方法不同,也就是组装的方法是自己定义的。于是结果就是:

Huawei huawei = new HuaweiFactory().createPhone();
        Xiaomi xiaomi = new XiaomiFactory().createPhone();

调用非常简单,如果需要扩展产品,比如乐视需要做手机,那么只需要定义一个Leshi.java,实现手机接口,然后再定义一个乐视专用的手机工厂就行了,扩展性非常强。

总结:

那么,最后总结一下:

简单工厂模式:

用的最多也是最广的,定义创建一个产品的不同种方法,封装在一个工厂里面,比如富士康,一个厂造很多东西,你只需要发需求就好了。

工厂方法模式:

把每一个类型的创建都定义一个工厂,用自己的工厂创建,比如华为有自己的工厂,三星有自己的工厂,要扩展的话直接创建一个自己的工厂来生产产品。

抽象工厂模式:

这货是一个产品可能有不同类型的原件组成,但是原件组成一样,比如手机,要定义自己的工厂,但是工厂的原件不同,导致出来的产品不同,就像高端机,低端机,原件都一样,但是用料质量不一样。

源码:http://download.csdn.net/detail/cloud_huan/9745212

你可能感兴趣的:(开发基础学习)