设计模式 创建者模式 工厂设计模式 -- 工厂方法设计模式介绍和实现

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式 创建者模式 工厂设计模式 -- 工厂方法设计模式介绍和实现相关的知识,希望对你有一定的参考价值。

1. 工厂方法模式介绍


1.1 引入

现在需要去设计按钮工厂

使用简单工厂模式:

使用工厂方法模式:

符合开闭原则


1.2 定义



1.3 结构

工厂方法模式的主要角色:

  • 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。
  • 具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
  • 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
  • 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。

1.4 典型的代码结构


1.4.1 典型的抽象工厂类代码


1.4.2 典型的具体工厂类代码


1.4.3 典型的客户端代码片段


1.5 具体实例说明

类图:

角色说明:


1.6 咖啡馆实例

需求:

设计一个咖啡店点餐系统

具体需求:

设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。

具体类的设计如下:


1.6.1 CoffeeFactory 抽象工厂类

package factory.factory_method;

/**
 * @Description: CoffeeFactory : 抽象工厂
 */
public interface CoffeeFactory {

    //创建咖啡对象的方法
    Coffee createCoffee();
}

1.6.2 AmericanCoffeeFactory 美式咖啡工厂

package factory.factory_method;

/**
 * @Description: 美式咖啡工厂对象,专门用来生产美式咖啡
 */
public class AmericanCoffeeFactory implements CoffeeFactory {

    public Coffee createCoffee() {
        return new AmericanCoffee();
    }
}

1.6.3 LatteCoffeeFactory 拿铁咖啡工厂

package factory.factory_method;

/**
 * @Description: 拿铁咖啡工厂,专门用来生产拿铁咖啡
 */
public class LatteCoffeeFactory implements CoffeeFactory {

    public Coffee createCoffee() {
        return new LatteCoffee();
    }
}

1.6.4 CoffeeStore 咖啡店

package factory.factory_method;

public class CoffeeStore {

    private CoffeeFactory factory;

    public void setFactory(CoffeeFactory factory) {
        this.factory = factory;
    }

    //点咖啡功能
    public Coffee orderCoffee() {
        Coffee coffee = factory.createCoffee();
        //加配料
        coffee.addMilk();
        coffee.addsugar();
        return coffee;
    }
}

1.6.5 Coffee 咖啡类

package factory.factory_method;

/**
 * @Description: 咖啡类
 */
public abstract class Coffee {

    public abstract String getName();

    //加糖
    public void addsugar() {
        System.out.println("加糖");
    }

    //加奶
    public void addMilk() {
        System.out.println("加奶");
    }
}

1.6.6 AmericanCoffee 美式咖啡

package factory.factory_method;


/**
 * @Description: 美式咖啡
 */
public class AmericanCoffee extends Coffee {

    public String getName() {
        return "美式咖啡";
    }
}

1.6.7 LatteCoffee 拿铁咖啡

package factory.factory_method;


/**
 * @Description: 拿铁咖啡
 */
public class LatteCoffee extends Coffee {

    public String getName() {
        return "拿铁咖啡";
    }
}

1.6.8 Client 客户端类

package factory.factory_method;

public class Client {
    public static void main(String[] args) {
        //创建咖啡店对象
        CoffeeStore store = new CoffeeStore();
        //创建对象
        //CoffeeFactory factory = new AmericanCoffeeFactory();
        CoffeeFactory factory = new LatteCoffeeFactory();
        store.setFactory(factory);

        //点咖啡
        Coffee coffee = store.orderCoffee();

        System.out.println(coffee.getName());
    }
}

1.6.9 客户端类运行结果


1.6.10 代码分析


1.7 工厂方法设计模式优缺点分析



以上是关于设计模式 创建者模式 工厂设计模式 -- 工厂方法设计模式介绍和实现的主要内容,如果未能解决你的问题,请参考以下文章

工厂设计模式

设计模式之工厂方法模式

设计模式之工厂方法模式

Java设计模式3:工厂方法模式

工厂模式,简单工厂模式,抽象工厂模式三者有啥区别

C#工厂模式的原理