设计模式之工厂模式Factory

工厂模式:创建对象的工厂

为什么要用工厂模式:

1,解耦
通过工厂模式可以把对象的创建和使用过程分离。
2,减少代码量,易于维护
如果我们直接new一个对象时,如果需要的对象构造方法比较复杂,那么可能需要一连串的代码去创建对象,如果在别的类中又需要创建该对象,那么代码的重复度肯定不小。通过工厂模式的话,我们把对象创建的具体逻辑给隐藏起来了,交给工厂统一管理,这样不仅减少了代码量,以后如果想改代码的话,只需要改一处即可,也方便我们日常的维护。

假如说,这个工厂现在用来生成蛋糕,下面先来看三个问题(弄懂这三个问题工厂模式翻篇)

1,任意定制蛋糕口味

2,任意定制蛋糕口味生产过程

3,任意定制蛋糕产品一族

 

一,我们先看第一个问题(任意定制蛋糕口味)

首先要有蛋糕的父类或者接口

package com.zl.factory;

public interface Cake {

    void eat();

}

其次是具体的实现类

package com.zl.factory;

//巧克力口味蛋糕
public class ChocolateCake implements Cake {
    @Override
    public void eat() {
        System.out.println("eat chocolateCake........");
    }
}
package com.zl.factory;

//水果味蛋糕
public class FruitCake implements Cake {
    @Override
    public void eat() {
        System.out.println("eat fruitCake..........");
    }
}

最后就是运用到具体环境中,这里以测试类代替

package com.zl.factory;

public class Test {
    public static void main(String[] args) {
        //定制水果味蛋糕
        Cake cake = new FruitCake();
        cake.eat();

    }
}

其实第一个问题就是Java多态

 

二,下面来第二个问题(任意定制蛋糕口味生产过程)

还是一样,先来几个具体的不同口味蛋糕

package com.zl.factory;

//水果味蛋糕
public class FruitCake{

    public void eat() {
        System.out.println("eat fruitCake..........");
    }
}
package com.zl.factory;

//巧克力口味蛋糕
public class ChocolateCake {
    
    public void eat() {
        System.out.println("eat chocolateCake........");
    }
}

来一个蛋糕厂

package com.zl.factory;

public class SimpleCakeFactory {

    public FruitCake createFruitCake(){
        //before processing前置业务,如日志记录
        return new FruitCake();
    }

    public ChocolateCake createChocolateCake(){
        //before processing前置业务,如日志记录
        return new ChocolateCake();
    }

}

最后运用到具体环境中,还是以测试类代替

package com.zl.factory;

public class Test {
    public static void main(String[] args) {

        //生产水果蛋糕
        FruitCake fruitCake = new SimpleCakeFactory().createFruitCake();
        fruitCake.eat();

        //生产巧克力蛋糕
        ChocolateCake chocolateCake = new SimpleCakeFactory().createChocolateCake();
        chocolateCake.eat();

    }
}

这种也就是我们说的简单工厂,不过这种工厂比较混乱,什么蛋糕都生产,不专一

 

于是就有了我们说的工厂方法,为每一种口味蛋糕单一生产,废话少说,上代码

package com.zl.factory;

public class FruitCakeFactory {

    public FruitCake create(){
        //before processing前置业务,如日志记录
        return new FruitCake();
    }

}
package com.zl.factory;

public class ChocolateCakeFactory {

    public ChocolateCake create(){
        //before processing前置业务,如日志记录
        return new ChocolateCake();
    }
}

 

三,最后一个问题(任意定制蛋糕产品一族)

 

上一篇:python24day


下一篇:工程模式--基于Java多态性实现