码迷,mamicode.com
首页 > 其他好文 > 详细

工厂方法模式-Factory Method

时间:2019-07-02 18:52:41      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:com   rgs   方法   品种   div   factory   创建对象   eth   style   

一、定义

定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使得一个类的实例化延迟到了其子类。

二、结构

技术图片

抽象工厂角色:是工厂方法模式的核心,任何在模式中创建对象的工厂类必须实现这个接口。

具体工厂角色:实现抽象工厂接口的具体工厂类,用于创建具体产品对象。

抽象产品角色:具体产品对象的共同父类或共同拥有的接口。

具体产品角色:实现抽象产品接口的具体产品类,包含产品的具体细节。

三、Demo

汽车(抽象产品)

/**
 * 抽象产品
 */
public interface Car {

    void showSlogan();

}

具体的汽车

/**
 * 奥迪车(具体产品)
 */
public class AudiCar implements Car {
    @Override
    public void showSlogan() {
        System.out.println("伟大,不是成就,而是经历。奥迪Q7!");
    }
}

/**
 * 奔驰车(具体产品)
 */
public class BenZCar implements Car {
    @Override
    public void showSlogan() {
        System.out.println("全新梅赛德斯-奔驰GLE SUV,万千气象,纵横无疆。");
    }
}

/**
 * 宝马车(具体产品)
 */
public class BMWCar implements Car {
    @Override
    public void showSlogan() {
        System.out.println("便捷畅享BMW之悦,让纯粹驾驶乐趣.时刻在您身边");
    }
}

汽车工厂(抽象工厂)

/**
 * 汽车工厂(抽象工厂)
 */
public interface CarFactory {

    Car ProduceCar();

}

具体的工厂

/**
 * 奥迪工厂,生产奥迪车
 */
public class AudiCarFactory implements CarFactory {
    @Override
    public Car ProduceCar() {
        return new AudiCar();
    }
}

/**
 * 奔驰工厂,生产奔驰车
 */
public class BenZCarFactory implements CarFactory {
    @Override
    public Car ProduceCar() {
        return new BenZCar();
    }
}

/**
 * 宝马工厂,生产宝马车
 */
public class BMWCarFactory implements CarFactory {
    @Override
    public Car ProduceCar() {
        return new BMWCar();
    }
}

客户端代码

public class Client {
    public static void main(String[] args) {
        //奔驰车工厂,生产奔驰车
        BenZCarFactory benzCarFactory = new BenZCarFactory();
        Car benzCar = benzCarFactory.ProduceCar();
        benzCar.showSlogan();

        //宝马车工厂,生产宝马车
        BMWCarFactory bmwCarFactory = new BMWCarFactory();
        Car bmwCar = bmwCarFactory.ProduceCar();
        bmwCar.showSlogan();

        //奥迪车工厂,生产奥迪车
        AudiCarFactory audiCarFactory = new AudiCarFactory();
        Car audiCar = audiCarFactory.ProduceCar();
        audiCar.showSlogan();
    }
}

四、优缺点

优点:

1.与简单工厂模式相比,工厂方法模式减轻了工厂类的负担,把某一类产品交由一个工厂生产,不同的工厂生产不同类别的产品。

2.遵守了开闭原则。增加某一类产品时并不需要修改工厂类,只需要添加生产这类产品的工厂即可。

缺点:

随着产品种类的数量的增长,工厂类也会随之增加,将不利于系统的维护。

工厂方法模式-Factory Method

标签:com   rgs   方法   品种   div   factory   创建对象   eth   style   

原文地址:https://www.cnblogs.com/rouqinglangzi/p/11122106.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!