Hello World

工厂模式

一.核心本质

 
            实现了调用者和创建者的分离,用工厂方法代替new操作
            将选择实现类,创建对象统一管理和控制.从而将调用者和实现类解耦
 
                详细分类:
 
                简单工厂模式
                                       用来生产同一等级结构的任意产品(增加新产品需要修改已有代码, 可通过装饰者模式优化)
 
                工厂方法模式
                                        用来生产同一等级结构的固定产品(支持增加任意产品)
 
                抽象工厂模式
                                       用来生产不同产品族的全部产品(支持增加产品族)

二. 工厂示例

2.1 简单工厂

package com.skd.designMode.factory;

public class SimpleFactory
{
    public static Xiaomi getXiaomi()
    {
        return new Xiaomi();
    }

    public static Huawei getHuawei()
    {
        return new Huawei();
    }
}

class Xiaomi
{
}

class Huawei
{
}

2.2 工厂方法

package com.skd.designMode.factory;

/**
 * @TODO 工厂方法
 * 
 * 不同工厂实现同一个接口生产不同型号的同一类型产品
 * 
 */
public class methodFactory
{
    public static void main(String[] args)
    {
        MiPhone miPhone = (MiPhone) new MiPhone().createPhone();
        IPhone iPhone = (IPhone) new IPhone().createPhone();
        
    }

}

interface Phone{
    Phone createPhone();
}

class MiPhone implements Phone{

    @Override
    public Phone createPhone()
    {
        return new MiPhone();
    }
    
}

class IPhone implements Phone{

    @Override
    public Phone createPhone()
    {
        return new IPhone();
    }
    
}

2.3 抽象工厂

package com.skd.designMode.factory;

/**
 * @TODO 抽象工厂模式  用于生产产品族 支持增加产品族
 * 
 *         针对多个业务类型的场景(多个接口)
 */
public class AbstractFactory
{
    public static void main(String[] args)
    {
        // 高端汽车
        Car nbcar = new NBCar();
        // 高端引擎
        nbcar.createEngine();
        // 高端轮胎
        nbcar.createTyre();
        
        // 低端汽车
        Car sbcar = new SBCar();
        // 低端引擎
        sbcar.createEngine();
        // 低端轮胎
        sbcar.createTyre();
    }
}

/**
 * @TODO 汽车接口
 */
interface Car{
    Tyre createTyre();
    Engine createEngine();
}

/**
 * @TODO 生产高端汽车
 */
class NBCar implements Car {

    @Override
    public Tyre createTyre()
    {
        return new NBTyre().createTyre();
    }

    @Override
    public Engine createEngine()
    {
        return new NBEngine().createEngine();
    }
    
}

/**
 * @TODO 生产低端汽车
 */
class SBCar implements Car {

    @Override
    public Tyre createTyre()
    {
        return new SBTyre().createTyre();
    }

    @Override
    public Engine createEngine()
    {
        return new SBEngine().createEngine();
    }
    
}
/**
 * @TODO 轮胎接口
 */
interface Tyre{
    Tyre createTyre();
}

/**
 * @TODO 高端轮胎
 */
class NBTyre implements Tyre{

    @Override
    public Tyre createTyre()
    {
        return new NBTyre();
    }
    
}

/**
 * @TODO 低端轮胎
 */
class SBTyre implements Tyre{

    @Override
    public Tyre createTyre()
    {
        return new SBTyre();
    }
    
}

/**
 * @TODO 引擎接口
 */
interface Engine{
    Engine createEngine();
}

/**
 * @TODO 高端引擎
 */
class NBEngine implements Engine{

    @Override
    public Engine createEngine()
    {
        return new NBEngine();
    }
    
}

/**
 * @TODO 低端引擎
 */
class SBEngine implements Engine{

    @Override
    public Engine createEngine()
    {
        return new SBEngine();
    }
    
}

 

posted @ 2018-08-08 21:13  小小忧愁米粒大  阅读(163)  评论(0编辑  收藏  举报
瞅啥瞅,好好看书