重温设计模式3——抽象工厂模式

抽象工厂模式

定义

Provide an interface for creating families of related or dependent objects without specifying
their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们
的具体类。)

应用场景

抽象工厂,顾名思义就是在工厂方法的基础上,再做一次升级。在一组对应关系很鲜明的对象中,抽出公共方法或特性形成接口,这样在需要某个种类的对象时,只要取得负责生产这种对象的工厂实现类,就能生产出相应的对象。缺点是如果要生产的对象种类多了,每添加一个就需要再添加代码,蛋疼。

代码示例

package abstractfactory;

/**
 * @author 谢仲东 2018/8/7 21:04
 * Description:
 */
public class AbstractFactoryImpl {

    public static void main(String[] args) {
        MobilephoneFactory huaweiFactory = new HuaweiMobileFactory();
        MobilephoneFactory nokiaFactory = new NokiaMobileFactory();

        Mobilephone huaweiGeriatricMobile = huaweiFactory.createGeriatricMobilephone();
        Mobilephone huaweiIntelligentMobile = huaweiFactory.createIntelligentMobilephone();

        Mobilephone nikiaGeriatricMobile = nokiaFactory.createGeriatricMobilephone();
        Mobilephone nokiaIntelligentMobile = nokiaFactory.createIntelligentMobilephone();

        System.out.println("华为智能手机行为:");
        huaweiIntelligentMobile.speciality();
        huaweiIntelligentMobile.ring();
        huaweiIntelligentMobile.dial("110");
        System.out.println("华为老人手机行为:");
        huaweiGeriatricMobile.speciality();
        huaweiGeriatricMobile.ring();
        huaweiGeriatricMobile.dial("110");
        System.out.println("诺基亚智能手机行为:");
        nokiaIntelligentMobile.speciality();
        nokiaIntelligentMobile.ring();
        nokiaIntelligentMobile.dial("110");
        System.out.println("诺基亚老人手机行为:");
        nikiaGeriatricMobile.speciality();
        nikiaGeriatricMobile.ring();
        nikiaGeriatricMobile.dial("110");

        /*
            output:
            华为智能手机行为:
                华为手机刷卡
                华为智能手机响铃
                华为智能手机拨号:110
            华为老人手机行为:
                华为手机刷卡
                老人手机响铃
                老人手机拨号:110
            诺基亚智能手机行为:
                诺基亚手机砸核桃
                诺基亚智能手机响铃
                诺基亚智能手机拨号:110
            诺基亚老人手机行为:
                诺基亚手机砸核桃
                诺基亚老人手机响铃
                诺基亚老人手机拨号:110

         */

    }
}
/**
 * 手机接口
 */
interface Mobilephone {
    void ring();
    void dial(String number);
    void speciality();
}

abstract class HuaweiMobilephone implements Mobilephone{
    @Override
    public void speciality() {
        System.out.println("\t华为手机刷卡");
    }
}

abstract class NokiaMobilephone implements Mobilephone{
    @Override
    public void speciality() {
        System.out.println("\t诺基亚手机砸核桃");
    }
}
/**
 * 华为智能手机实现类
 */
class HuaweiIntelligentMobilephone extends HuaweiMobilephone{
    public void ring(){
        System.out.println("\t华为智能手机响铃");
    }
    public void dial(String number){
        System.out.println("\t华为智能手机拨号:" + number);
    }

}

/**
 * 华为老人手机实现类
 */
class HuaweiGeriatricMobilephone extends HuaweiMobilephone {

    @Override
    public void ring() {
        System.out.println("\t老人手机响铃");
    }

    @Override
    public void dial(String number) {
        System.out.println("\t老人手机拨号:" + number);
    }

}

/**
 * 诺基亚老人手机实现类
 */
class NokiaIntelligentMobilephone extends NokiaMobilephone {

    @Override
    public void ring() {
        System.out.println("\t诺基亚智能手机响铃");
    }

    @Override
    public void dial(String number) {
        System.out.println("\t诺基亚智能手机拨号:" + number);
    }

}

/**
 * 诺基亚智能手机实现类
 */
class NokiaGeriatricMobilephone extends NokiaMobilephone {

    @Override
    public void ring() {
        System.out.println("\t诺基亚老人手机响铃");
    }

    @Override
    public void dial(String number) {
        System.out.println("\t诺基亚老人手机拨号:" + number);
    }

}
/**
 * 手机工厂
 */
interface MobilephoneFactory {
    Mobilephone createIntelligentMobilephone();
    Mobilephone createGeriatricMobilephone();
}

class HuaweiMobileFactory implements MobilephoneFactory{

    @Override
    public HuaweiIntelligentMobilephone createIntelligentMobilephone() {
        return new HuaweiIntelligentMobilephone();
    }

    @Override
    public HuaweiGeriatricMobilephone createGeriatricMobilephone() {
        return new HuaweiGeriatricMobilephone();
    }
}

class NokiaMobileFactory implements MobilephoneFactory{

    @Override
    public NokiaIntelligentMobilephone createIntelligentMobilephone() {
        return new NokiaIntelligentMobilephone();
    }

    @Override
    public NokiaGeriatricMobilephone createGeriatricMobilephone() {
        return new NokiaGeriatricMobilephone();
    }
}




通用UML类图

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值