关于JAVA工厂设计模式的案例说明及详解
in JAVA编程 with 0 comment

关于JAVA工厂设计模式的案例说明及详解

in JAVA编程 with 0 comment

常见的三种JAVA工厂设计模式分别是简单、工厂、抽象,本质极为相似,主要目的都是为了解耦,实际应用中不需要生搬硬套,他们的演变是不可控的。

Java2.jpg

特别说明

工厂模式的目的在于提升程序的可扩展性,让程序有一个更好地封装,降低程序模块之间的耦合程度。
无论是简单工厂模式、工厂方法模式、抽象工厂模式,均属于工厂模式,本质相似。
使用时,不必去在意这个模式到底是什么样的工厂模式,它们之间的演变常常是不可控的。
有时使用的工厂方法模式,当新增内容或代码重构后,类中的产品构成了不同等级结构中的产品族,就变成抽象工厂模式。
同理,对于抽象工厂模式,当减少方法使产品不再构成产品族,它就演变成了工厂方法模式。
所以,在使用工厂模式时,只需要关心降低耦合度的目的是否达到,不需要特别区分,灵活采用、因地制宜才是关键。

三类工厂模式简述

简单工厂模式(Simple Factory)

工厂方法模式(Factory Method)

抽象工厂模式(Abstract Factory)

简单工厂模式案例

直接指向产品类的生产方式,以生产一个人为例。
咳咳,有点奇怪,不要在意这些细节。

//产品类 抽象类:个人
abstract class Person { }

//男人类 继承 个人类
public class Man extends Person
{
    public Man()
    {
        System.out.println("生产男人");
    }
}

//女人类 继承 个人类
public class WoMan extends Person
{
    public WoMan()
    {
        System.out.println("生产女人");
    }
}

//工厂类
public class Factory
{
    public Person makePerson(int type)
    {
        switch (type)
        {
        case 1:
            return new Man();
        case 2:
            return new WoMan();
        default:
            break;
        }
        return null;
    }
}

//客户类    
public class Customer
{
    public static void main(String[] args)
    {
        Factory factory = new Factory();
        //对于客户而言想生产男人就指向男人,想生产女人就指向女人
        Man newHumanA = factory.makePerson(1);
        WoMan newHumanB = factory.makePerson(2);
        //有点怪怪的说法,我们假装没发现吧
    }
}

工厂方法模式

通过指向工厂的方式,来产生指定的产品,进一步封装。
咳咳,以生产一个人为例。

/**
 * 产品类 抽象类:个人 男人类 女人类 略...与上文一致
 */

//工厂接口
interface FactoryHuman {
    Person makePerson();
}

//工厂接口实现类 男人工厂
public class FactoryHumanMan implements FactoryHuman
{
    @Override
    public Man makePerson()
    {
        return new Man();
    }
}

//工厂接口实现类 女人工厂
public class FactoryHumanWoman implements FactoryHuman
{
    @Override
    public WoMan makePerson()
    {
        return new WoMan();
    }
}

//客户类
public class Customer
{
    public static void main(String[] args)
    {
        //指向工厂,具体创建过程被封装
        FactoryHumanMan factoryHumanMan = new FactoryHumanMan();
        Man newHumanA = factoryHumanMan.makePerson();
        //可以认为是男人工厂、女人工厂生成不同的个人
        FactoryHumanWoman factoryHumanWoman = new FactoryHumanWoman();
        WoMan newHumanB = factoryHumanWoman.makePerson();
    }
}

抽象工厂模式

产品族的概念由此被引入,抽象工厂相当于工厂的升级版。
本质没什么差异,还是不要解释太多,容易乱,看案例更易于理解。

//部件接口类 手
public interface Hand { }

//部件接口事件类 男人的手
public class ManHand extends Hand
{
    public ManHand()
    {
        System.out.println("生成男人手");
    }
}

//部件接口事件类 女人的手
public class WoManHand extends Hand
{
    public WoManHand()
    {
        System.out.println("生成女人手");
    }
}

//部件接口 脚
public interface Foot { }

//部件接口实现类 男人的脚
public class ManFoot extends Foot
{
    public ManFoot()
    {
        System.out.println("生产男人脚");
    }
}

//部件接口实现类 女人的脚
public class WoManFoot extends Foot
{
    public WoManFoot()
    {
        System.out.println("生产女人脚");
    }
}

//工厂类
//创建工厂的接口    
public interface AbstractFactory {
    //生产手
    public Hand makeHand();
    //生产脚
    public Foot makeFoot();
}

//为男人生产配件,咳咳
public class FactoryHumanMan implements AbstractFactory
{
    @Override
    public ManHand makeHand()
    {
        return new ManHand();
    }
    @Override
    public ManFoot makeFoot()
    {
        return new ManFoot();
    }
}

//为女人生产配件 咳咳
public class FactoryHumanWoman implements AbstractFactory
{
    @Override
    public WoManHand makeHand()
    {
        return new WoManHand();
    }
    @Override
    public WoManFoot makeFoot()
    {
        return new WoManFoot();
    }
}

//客户类
public class Customer
{
    public static void main(String[] args)
    {
        //生产男人系列配件
        FactoryHumanMan factoryHumanMan = new FactoryHumanMan();
        factoryHumanMan.makeHand();
        factoryHumanMan.makeFoot();
        //生产女人系列配件 
        FactoryHumanWoman factoryHumanWoman = new FactoryHumanWoman();
        factoryHumanWoman.makeHand();
        factoryHumanWoman.makeFoot();
    }
}
Responses