设计模式 创建者模式 工厂设计模式 -- 工厂方法设计模式介绍和实现
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 工厂方法设计模式优缺点分析
以上是关于设计模式 创建者模式 工厂设计模式 -- 工厂方法设计模式介绍和实现的主要内容,如果未能解决你的问题,请参考以下文章