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

设计模式 - 工厂方法模式

定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类

所谓的决定并不是批模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需知道创建的产品是哪一下,选择了使用哪个子类,就决定了实际创建的产品是什么。
  • 工厂接口。工厂接口是工厂方法模式的核心,与调用者直接交互用来提供产品。在实际编程中,有时候也会使用一个抽象类来作为与调用者交互的接口,其本质上是一样的。

  • 工厂实现。在编程中,工厂实现决定如何实例化产品,是实现扩展的途径,需要有多少种产品,就需要有多少个具体的工厂实现。

  • 产品接口。产品接口的主要目的是定义产品的规范,所有的产品实现都必须遵循产品接口定义的规范。产品接口是调用者最为关心的,产品接口定义的优劣直接决定了调用者代码的稳定性。同样,产品接口也可以用抽象类来代替,但要注意最好不要违反里氏替换原则。

  • 产品实现。实现产品接口的具体类,决定了产品在客户端中的具体行为。

Animal.java

package com.lxf.factory_MathFactory;

/**
 * @address BeiJing
 * @author LiXufei
 *  动物抽象类
 */
public abstract class Animal {

    //抽象方法
    public abstract void get();

}

AnimalFactory.java

package com.lxf.factory_MathFactory;

/**
 * @address BeiJing
 * @author LiXufei
 *  创建动物工厂
 */
public interface AnimalFactory {

    //得到动物的方法
    public abstract Animal createAnimal();

}

Cat.java

package com.lxf.factory_MathFactory;

/**
 * @address BeiJing
 * @author LiXufei
 *  动物实例 - 猫
 */
public class Cat extends Animal{

    @Override
    public void get() {
        System.out.println("得到猫");
    }

}

CatFactory.java

package com.lxf.factory_MathFactory;

/**
 * @address BeiJing
 * @author LiXufei
 *  猫工厂
 */
public class CatFactory implements AnimalFactory {

    public Animal createAnimal() {
        return new Cat();
    }

}

Dog.java

package com.lxf.factory_MathFactory;

/**
 * @address BeiJing
 * @author LiXufei
 *  动物实体类 - 狗
 */
public class Dog extends Animal {

    @Override
    public void get() {
        System.out.println("得到狗");
    }

}

DogFactory.java

package com.lxf.factory_MathFactory;

/**
 * @address BeiJing
 * @author LiXufei
 *  狗工厂
 */
public class DogFactory implements AnimalFactory {

    public Animal createAnimal() {
        return new Dog();
    }

}

Test.java

package com.lxf.factory_MathFactory;

/**
 * @address BeiJing
 * @author LiXufei
 *  测试类
 */
public class Test {

    public static void main(String[] args) {

        //想要猫
        CatFactory catFactory = new CatFactory();
        Animal cat = catFactory.createAnimal();
        cat.get();

        //想要狗
        DogFactory dogFactory = new DogFactory();
        Animal dog = dogFactory.createAnimal();
        dog.get();

    }

}

输出结果:

得到猫
得到狗

你可能感兴趣的:(Android,java,java设计模式,设计模式,产品,实例)