Android设计模式之工厂设计模式

工厂模式的出现缘由很简单:就是给我们创建对象.有人可能会问,问什么不直接new对象,这里简单的解释下,有些对象的创建比较复杂,我们使用工厂类来创建对象会使我们的代码看起来更简洁

工厂设计模式主要有三种:
简单工厂设计模式
工厂方法设计模式
抽象工厂设计模式

看起来很复杂的样子,给人混乱的感觉,下面简单来分析下这几种设计模式

1.简单工厂设计模式

/**
 * 定义一个动物的接口
 * @author SS
 *
 */
public interface IAnimals {

    //动物都有吃和睡的方法
    public void eat();
    public void sleep();

}
/**
 * 定义一个动物类的具体实现类,猫
 * @author SS
 *
 */
public class Cat implements IAnimals{

    public void eat() {
        System.out.println("猫吃鱼");

    }

    public void sleep() {
        System.out.println("猫晚上睡觉");

    }

}
/**
 * 定义一个动物类的具体实现类,狗
 * @author SS
 *
 */
public class Dog implements IAnimals{

    public void eat() {
        System.out.println("狗吃骨头");

    }

    public void sleep() {
        System.out.println("狗白天睡觉");

    }

}
/**
 * 定义生产动物的工厂类
 * @author SS
 *
 */
public class AnimalFactory {

    public static IAnimals creatAnimal(String animal){
        if("cat".equals(animal)){
            return (IAnimals)new Cat();
        }else if("dog".equals(animal)){
            return (IAnimals) new Dog();
        }
        return null;
    }

}
public class UseAnimal {

    public static void main(String[] args) {
        IAnimals cat = AnimalFactory.creatAnimal("cat");
        cat.eat();
        cat.sleep();

        IAnimals dog = AnimalFactory.creatAnimal("dog");
        dog.eat();
        dog.sleep();

    }

}

输出结果:
猫吃鱼
猫晚上睡觉
狗吃骨头
狗白天睡觉

从上面可以看出,简单工厂模式使用很简单,但是现在遇到一个问题,如果我还想增加一种动物,比如狗熊,这样的话我们就需要改工厂类,以及增加一个动物品种.每次有增加动物的需求我们就修改工厂类确实比较麻烦,这就引出了工厂方法设计模式

2.工厂方法设计模式

这个设计模式和简单工厂设计模式差不多,只不过简单工厂模式只有一个工厂而工厂方法设计模式有多个工厂,生产每种产品(也就是对象)都有自己的工厂,这样的话,面对上面的需求不会修改工厂类,但是会增加产品类和工厂类,也是很麻烦.

工厂设计模式和简单工厂设计模式其实很相似,下面可以使用反射稍微简化下代码
使用反射的好处是在增加产品的情况下不用修改工厂类

public class AnimalFactory2 {

    public static IAnimals creatAnimal(Class c){
        IAnimals animal = null;
        try {
            animal = (IAnimals) Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return animal;
    }

}

现在突然有了新的需求,我们要创建会飞的猫,怎么办?引入抽象工厂设计模式

3.抽象工厂设计模式

理解抽象工厂,着重理解一点,就是抽象工厂重点是在给产品分类,比如下面的例子
会飞的猫是一类,不会飞的猫是一类.不要把重点放到产品类上,理解抽象工厂模式一定要注意其分类的特点,就是这个工厂可以生产几类产品.
比如我们提前准备好的产品类有Car.class,Fruit.class
还有这两大类的细分类:Audio.class,Tesla.class,Apple.class,Bananan.class.
上面这四小类我们就可以看成两大类,car和fruit,然后可以让一个工厂类去生产这两类产品
代码举例:

/**
 * 定义一个动物的接口
 * @author SS
 *
 */
public interface IAnimals {

    //动物都有吃和睡的方法
    public void eat();
    public void sleep();

}

/**
 * 会飞的接口
 * @author SS
 *
 */
public interface IFly {

    public void fly();

}

/**
 * 定义一个动物类的具体实现类,猫
 * @author SS
 *
 */
public class Cat implements IAnimals{

    public void eat() {
        System.out.println("猫吃鱼");

    }

    public void sleep() {
        System.out.println("猫晚上睡觉");

    }

}

/**
 * 定义会飞的猫
 * @author SS
 *
 */
public class FlyCat implements IAnimals,IFly{

    public void fly() {
        System.out.println("会飞的猫");

    }

    @Override
    public void eat() {
        System.out.println("猫吃鱼");

    }

    @Override
    public void sleep() {
        System.out.println("猫晚上睡觉");

    }

}

public class UseAnimal {

    public static void main(String[] args) {

        CatFactory f = new CatFactory();
        //创建普通的猫,并调用里面的方法,普通的猫没有fly的方法
        f.creatAnimal().eat();
        //创建会飞的猫,并调用它的fly()方法
        f.creatFlyAnimal().fly();

    }

}

代码的举例方式有很多,关键是抓住重点,本设计模式的重点是创建对象的几个工厂类而不是产品类,切记!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值