设计模式--抽象工厂模式

目录

摘要:

一:模式说明

二:UML类图

三:代码示例:(小米和苹果举例)

抽象工厂 IFactory:

工厂实现类:小米工厂

苹果工厂:

两个抽象产品:手机接口和笔记本接口

小米的具体产品:小米电脑

小米手机:

苹果具体产品:苹果电脑

苹果手机:

测试类:ClientTest    

四:适用范围及优缺点 

 



摘要:

     学习这三个工厂模式时,一定要抓住,工厂这个关键字,它象征着,我们可以在现实领域里工厂中找到对应的例子;

一:模式说明

        抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类;(我对其理解是:创建单一对象的的工厂可以叫工厂模式,抽象则是对多个对象的创建,叫抽象工厂;取决于创建对象的种类区别)

二:UML类图

三:代码示例:(小米和苹果举例)

抽象工厂 IFactory:

public interface IFactory {

    /**
     * createComputer:(创建电脑产品工厂). <br/>
     *
     * @author:Jason Li Date: 2019年6月9日 上午10:39:39
     * @return
     * @since JDK 1.8
     */
    public IComputer createComputer();

    /**
     * createMobileTelephonoe:(创建手机产品工厂). <br/>
     *
     * @author:Jason Li Date: 2019年6月9日 上午10:40:04
     * @return
     * @since JDK 1.8
     */
    public IMobileTelephonoe createMobileTelephonoe();

}

工厂实现类:小米工厂


/**
 * ClassName:MIFactory <br/>
 * Description: 小米工厂. <br/>
 * Date: 2019年6月9日 上午10:41:07 <br/>
 *
 * @author Jason Li
 * @version
 * @since JDK 1.8
 * @see
 */
public class MIFactory implements IFactory {

    @Override
    public IComputer createComputer() {

        return new MIComputer();
    }

    @Override
    public IMobileTelephonoe createMobileTelephonoe() {

        return new MIMobileTelephonoe();
    }

}

苹果工厂:

/**
 * ClassName:AppleFactory <br/>
 * Description: 苹果工厂. <br/>
 * Date: 2019年6月18日 下午9:25:20 <br/>
 *
 * @author Jason Li
 * @version
 * @since JDK 1.8
 * @see
 */
public class AppleFactory implements IFactory {

    @Override
    public IComputer createComputer() {

        return new IMac();
    }

    @Override
    public IMobileTelephonoe createMobileTelephonoe() {

        return new IPhone();
    }

}

两个抽象产品:手机接口和笔记本接口

/**
 * ClassName:IDepartment <br/>
 * Description: 电脑. <br/>
 * Date: 2018年7月30日 下午10:26:47 <br/>
 *
 * @author Jason Li
 * @version
 * @since JDK 1.8
 * @see
 */
public interface IComputer {

    /**
     * shutdown:(关机). <br/>
     *
     * @author:Jason Li Date: 2019年6月18日 下午9:43:22
     * @since JDK 1.8
     */
    void shutdown();

    /**
     * startingUp:(开机). <br/>
     *
     * @author:Jason Li Date: 2019年6月18日 下午9:44:04
     * @since JDK 1.8
     */
    void startingUp();
}
**
 * ClassName:IUser <br/>
 * Description: 手机. <br/>
 * Date: 2018年7月30日 下午10:25:47 <br/>
 *
 * @author Jason Li
 * @version
 * @since JDK 1.8
 * @see
 */
public interface IMobileTelephonoe {

    /**
     * call:(打电话). <br/>
     *
     * @author:Jason Li Date: 2019年6月18日 下午10:27:07
     * @since JDK 1.8
     */
    void call();

    /**
     * sendMessage:(这里用一句话描述这个方法的作用). <br/>
     *
     * @author:Jason Li Date: 2019年6月18日 下午10:27:21
     * @since JDK 1.8
     */
    void sendMessage();
}

小米的具体产品:小米电脑

/**
 * ClassName:MiComputer <br/>
 * Description: 小米电脑. <br/>
 * Date: 2019年6月18日 下午9:44:45 <br/>
 *
 * @author Jason Li
 * @version
 * @since JDK 1.8
 * @see
 */
public class MIComputer implements IComputer {

    @Override
    public void shutdown() {
        System.out.println("小米电脑关机");
    }

    @Override
    public void startingUp() {

        System.out.println("小米电脑开机");
    }

}

小米手机:

/**
 * ClassName:MIMobileTelephonoe <br/>
 * Description: 小米手机. <br/>
 * Date: 2019年6月18日 下午9:48:44 <br/>
 *
 * @author Jason Li
 * @version
 * @since JDK 1.8
 * @see
 */
public class MIMobileTelephonoe implements IMobileTelephonoe {

    @Override
    public void call() {

        System.out.println("小米手机开始呼叫");

    }

    @Override
    public void sendMessage() {

        System.out.println("小米手机开送消息");

    }

}

苹果具体产品:苹果电脑

/**
 * ClassName:IMac <br/>
 * Description: 苹果电脑. <br/>
 * Date: 2019年6月18日 下午9:50:28 <br/>
 *
 * @author Jason Li
 * @version
 * @since JDK 1.8
 * @see
 */
public class IMac implements IComputer {

    @Override
    public void shutdown() {
        System.out.println("IMac开始关机");
    }

    @Override
    public void startingUp() {
        System.out.println("IMac开始开机");

    }

}

苹果手机:

/**
 * ClassName:IPhone <br/>
 * Description: 苹果手机. <br/>
 * Date: 2019年6月18日 下午9:49:41 <br/>
 *
 * @author Jason Li
 * @version
 * @since JDK 1.8
 * @see
 */
public class IPhone implements IMobileTelephonoe {

    @Override
    public void call() {

        System.out.println("iPhone开始呼叫");
    }

    @Override
    public void sendMessage() {

        System.out.println("iPhone开始发送信息");
    }

}

测试类:ClientTest
    

/**
 * ClassName:ClientTest <br/>
 * Description: TODO Description. <br/>
 * Date: 2018年8月1日 下午12:59:27 <br/>
 *
 * @author Jason Li
 * @version
 * @since JDK 1.8
 * @see
 */
public class ClientTest {

    @Test
    public void test() {
        //如果是生产厂家为小米
        IFactory miFactory = new MIFactory();
        IComputer miComputer = miFactory.createComputer();
        System.out.println("开机:");
        miComputer.startingUp();
        IMobileTelephonoe miPhone = miFactory.createMobileTelephonoe();
        System.out.println("打电话:");
        miPhone.call();

        //如果是生产厂家为苹果
        IFactory appleFactory = new AppleFactory();
        IComputer imac = appleFactory.createComputer();
        System.out.println("开机:");
        imac.startingUp();
        IMobileTelephonoe iPhone = appleFactory.createMobileTelephonoe();
        System.out.println("打电话:");
        iPhone.call();
    }
}


四:适用范围及优缺点 

适用范围:抽象工厂适用于创建多个产品系列的产品;

优点:1:易于更换产品系列,比如我们将小米更换为苹果,只需要将 工厂实现的对象指定到苹果工厂;

           2:创建对象的过程和客户端相分离,具体产品不会出现在客户端

缺点:代码繁琐,每增加一个产品系列,就要增加对应工厂的具体产品类;例如:增加电视产品,修改IFactory、AppleFactory、MIFactory 新增TV 抽象产品接口、MITV、ITV这样繁琐的修改和新增,任务量会很大;

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值