工厂模式

简单工厂模式(静态工厂方法)

  • 组成
    • 工厂角色(Factory):含有一定的商业逻辑和判断逻辑,用来创建产品
    • 抽象产品角色(Product):具体产品继承的父类或者实现的接口
    • 具体产品角色(ConcreteProduct):创建目标,在java中由一个具体类实现。
    • 简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。
    • 简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。
    • 简单工厂模式适用情况包括:工厂类负责创建的对象比较少;客户端只知道传入工厂类的参数,对于如何创建对象不关心。

     

  • 实现:
  1. 创建接口或抽象类
  2. 实现或继承
  3. 创建工厂
  4. 使用工厂

abstract
class Human{ ; }(唯一可扩展) class Man extends Human { public Man(){ System.out.println("output man"); } } class Woman extends Human{ public Woman(){ System.out.println("output woman"); } } class Factory{ public Human outputHuman(String type){ switch(type){ case "man": return new Man(); case "woman": return new Woman(); } return null; } } public class Customer{ public static void main(String[] args){ Factory factory=new Factory(); Human man=factory.outputHuman("man"); Human woman=factory.outputHuman("woman"); } }

     



工厂方法模式(工厂模式)//更加符合“开闭原则”
  • 组成  
    • 抽象产品:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。 
    • 具体产品:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。 
    • 抽象工厂:它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。 
    • 具体工厂:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。 
    • 工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了面向对象的多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。
    • 工厂方法模式的主要优点是增加新的产品类时无须修改现有系统,并封装了产品对象的创建细节,系统具有良好的灵活性和可扩展性;其缺点在于增加新产品的同时需要增加新的工厂,导致系统类的个数成对增加,在一定程度上增加了系统的复杂性。
    • 工厂方法模式适用情况包括:一个类不知道它所需要的对象的类;一个类通过其子类来指定创建哪个对象;将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定。
abstract class Creature{
    ;
}
class Man extends Creature {
    public Man(){
        System.out.println("output man");
    }
}
class Woman extends Creature{
    public Woman(){
        System.out.println("output woman");
    }
}
class dog extends Creature{
    public dog(){
        System.out.println("output dog");
    }
}
interface Factory{
    public Creature outputCreature();
}
class FactoryMan implements Factory{
    public Creature outputCreature(){
        return new Man();
    }
}
class FactoryWoman implements Factory{
    public Creature outputCreature(){
        return new Woman();
    }
}
public class Customer{
    public static void main(String[] args){
        new FactoryMan().outputCreature();
        new FactoryWoman().outputCreature();
        
    }
}

 抽象工厂

  • 组成同工厂模式
  • 一个工厂可以提供多个产品对象
  • 当系统所提供的工厂所需生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构中属于不同类型的具体产品时需要使用抽象工厂模式
  • 工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建 
  • 抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建
  • 开闭原则的倾斜性(增加新的工厂和产品族容易,增加新的产品等级结构麻烦)
原文地址:https://www.cnblogs.com/wqkant/p/6669141.html