简单工厂

简单工厂

目的

在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。

类图

简单工厂不是设计模式,更像是一种编程习惯。

它把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。
把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类。因为客户类往往有多个,不使用简单工厂的话所有的客户类都要知道所有子类的细节,一旦子类发生改变,比如增加子类,所有的客户类都要进行修改。

角色

  • Factory:工厂角色
  • Product:抽象产品
  • ConcreteProduct:具体产品

image.png

实现

抽象产品

public interface Product {
}

具体产品

public class ConcreteProduct implements Product {
}
public class ConcreteProduct1 implements Product {
}
public class ConcreteProduct2 implements Product {
}

错误示范

Client 类中包含了实例化代码,如果在客户类中存在实例化代码,就要将代码放到简单工厂中。

public class Client {
    public static void main(String[] args) {
        int type = 1;
        Product product;
        if (type == 1) {
            product = new ConcreteProduct1();
        } else if (type == 2) {
            product = new ConcreteProduct2();
        } else {
            product = new ConcreteProduct();
        }
        // do something with the product
    }
}

正确案例

SimpleFactory 是简单工厂实现,它被所有需要进行实例化的客户类调用。

public class SimpleFactory {
    public Product createProduct(int type) {
        if (type == 1) {
            return new ConcreteProduct1();
        } else if (type == 2) {
            return new ConcreteProduct2();
        }
        return new ConcreteProduct();
    }
}
public class Client {
    public static void main(String[] args) {
        SimpleFactory simpleFactory = new SimpleFactory();
        Product product = simpleFactory.createProduct(1);
        // do something with the product
    }
}

优缺点

优点

  • 工厂类决定什么时候创建哪一个产品类实例,客户端可仅仅“消费”产品。
  • 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可。
  • 引入配置文件,可以在不修改代码的情况下更换和增加新的具体产品类,提高了系统的灵活性。

缺点

  • 一旦工厂类不能正常工作,整个系统都要受到影响。
  • 会增加系统中类的个数,增加了系统的复杂度和理解难度。
  • 扩展困难。添加新产品就不得不修改工厂逻辑,产品类型较多时,可能造成工厂逻辑过于复杂。
  • 由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。

适用场景

在以下情况下可以使用简单工厂模式:

  • 工厂类负责创建的对象较少。
  • 客户端只知道传入工厂类的参数,对于如何创建对象不关心。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇