2.工厂模式
简单工厂模式
| 角色 | 介绍 |
|---|---|
| 抽象产品 | 产品规范,定义了产品的主要特性和功能 |
| 具体产品 | 实现或者继承抽象产品的子类 |
| 具体工厂 | 提供了创建产品的方法,使用者通过该方法获取产品 |
abstract class Coffee {}
class CoffeeA extends Coffee {}
class CoffeeB extends Coffee {}
public class EasyFactory {
public Coffee createCoffee(String type) {
Coffee coffee = null;
if ("coffeeA".equals(type)) {
coffee = new CoffeeA();
} else if ("coffeeB".equals(type)) {
coffee = new CoffeeB();
}
return coffee;
}
}
| 简单工厂模式 | |
|---|---|
| 优点 | 后期如果需要对象直接从工厂中获取即可 |
| 缺点 | 后期如果再添加新的类,就必须修改工厂的代码,违反了开闭原则 |
工厂方法模式
| 介绍 | 内容 |
|---|---|
| 抽象工厂 | 创建产品的接口 |
| 具体工厂 | 完成具体产品的创建 |
| 抽象产品 | 定义了产品的规范,描述了产品的主要特性和功能 |
| 具体产品 | 实现抽象产品所定义的接口,由具体工厂来创建 |
| 说明 | |
|---|---|
| 优点 | 不需要修改工厂类的代码了 |
| 缺点 | 要相应的一直增加工厂类 |
abstract class Fruit {}
class Apple extends Fruit {}
class Orange extends Fruit {}
interface Factory {
Fruit makeFruit();
}
class FactoryMethodA implements Factory {
@Override
public Fruit makeFruit() {
return new Apple();
}
}
class FactoryMethodB implements Factory {
@Override
public Fruit makeFruit() {
return new Orange();
}
}
抽象工厂模式

产品族:
- 左边部分,这部分的东东都是属于同一个产品族的,里面包含有外套、领带、衬衫、西裤、皮鞋等等这些产品,很明显能感受到这个产品族是属于商务风格的。
- 右边部分,这部分的东东同样属于同一个产品族,里面包含有运动上衣、毛衫、运动裤子、运动鞋等等这些产品,看得出来这个产品族是属于运动风格的。
产品级别:
- 如何去体现同级别的产品呢?同种类的产品就是同级别的产品。
- 商务风的上衣是上衣,运动风的上衣它也是上衣,所以它们属于同级别的产品。
- 再比如鞋子,皮鞋和运动鞋就属于不同产品族里面的同种类产品。
| 说明 | |
|---|---|
| 优点 | 当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。 这是什么意思呢?我给大家简单的去解释一下,就拿以上案例来说,意大利风味的甜点工厂它只生产拿铁咖啡和提拉米苏这样的产品,你如果没有去创建其它的工厂对象的话,那么你就只能点这俩产品,这保证了它俩的一个搭配。如果后期你想换口味了,想点拿铁咖啡和抹茶慕斯,那么对不起,做不到!那么问题是不是就随之产生了啊! |
| 缺点 | 当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。这是什么意思呢?还是拿以上案例来说,现在生产的有两类产品,一类是甜点,一类是咖啡,这时如果我们再添加一类产品,即汉堡,那么你会发现所有的工厂类(包括抽象工厂和具体工厂)的代码都需要进行修改,因为我们需要再加一个方法,即生产汉堡的方法。 |
abstract class Color {}
class Black extends Color {}
class Write extends Color {}
abstract class Animal {}
class Tigger extends Animal {}
class Cat extends Animal {}
interface AbsFac {
Color createBlack();
Animal createWrite();
}
class AbstractFactoryA implements AbsFac {
@Override
public Color createBlack() {
return new Black();
}
@Override
public Animal createWrite() {
return new Tigger();
}
}
class AbstractFactoryB implements AbsFac {
@Override
public Color createBlack() {
return new Write();
}
@Override
public Animal createWrite() {
return new Cat();
}
}
本文来自博客园,作者:jsqup,转载请注明原文链接:https://www.cnblogs.com/jsqup/p/17635574.html

浙公网安备 33010602011771号