设计模式(二)-工厂方法模式

2019/05/27

什么是工厂方法模式呢?

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。 我们已经知道简单工厂模式,在工厂类里做了分支判断,如果要新增功能,就必须修改工厂类增加分支。这种做法违背了开放-封闭原则,因为对修改也变成开放的了。而工厂方法在保留简单工厂优点的基础上弥补了简单工厂的不足。

简单来说工厂方法模式包含四个部分: 抽象产品:产品对象共同的接口或基类 具体产品:某种具体的产品 抽象工厂:所有子类工厂统一的基类或接口 具体工厂:具体生产某种产品的子类工厂

工厂方法模式结构图

工厂方法模式结构图

show code

创建一个电脑接口 :Computer

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public interface Computer {

    void coding();
}


创建一个三个笔记本电脑类 ,实现Computer 接口

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public class Dell implements Computer {

    @Override
    public void coding() {
        System.out.println("中规中矩!");
    }
}

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public class Lenovo implements Computer {

    @Override
    public void coding() {
        System.out.println("键盘用着舒服!");
    }
}

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public class Mac implements Computer {

    @Override
    public void coding() {
        System.out.println("装逼神器!");
    }
}

创建一个工厂接口 ComputerFactory

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public interface ComputerFactory {

    Computer creatComputer();
}

创建三个工厂类,实现 ComputerFactory

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public class DellFactory implements ComputerFactory {

    @Override
    public Computer creatComputer() {
        return new Dell();
    }
}

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public class LenovoFactory implements ComputerFactory {
    @Override
    public Computer creatComputer() {
        return new Lenovo();
    }
}

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public class MacFactory implements ComputerFactory {

    @Override
    public Computer creatComputer() {
        return new Mac();
    }
}

最后,新建一个Customer 类测试一下

package design_patterns.factorymethod;

/**
 * @Author DevinLei
 */
public class Customer {

    public static void main(String[] args) {

        ComputerFactory factory = null;

        factory= new LenovoFactory();
        Computer  lenovo  =  factory.creatComputer();
        lenovo.coding();

        factory= new DellFactory();
        Computer  dell  =  factory.creatComputer();
        dell.coding();

        factory= new MacFactory();
        Computer  mac  =  factory.creatComputer();
        mac.coding();

    }
}

输出结果:

键盘用着舒服!
中规中矩!
装逼神器!

UML类图

在这里插入图片描述

工厂方法模式的实际应用

spring中IOC创建bean,FactoryBean 在这里插入图片描述


一个有故事的程序员

(转载本站文章请注明作者和出处 纯洁的微笑-ityouknow

Show Disqus Comments

Post Directory