当前位置: 首页 > news >正文

设计模式之——抽象工厂模式

          

工厂模式:定义一个用于创建对象的借口,让子类决定实例化哪一个类。

抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

如果产品单一,最合适用工厂模式,但是如果有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。 

再通俗深化理解下:工厂模式针对的是一个产品等级结构,抽象工厂模式针对的是面向多个产品等级结构的。

 

主要实现圣诞和新年与男孩和女孩的结合,以实现多个种类产品

实现步骤:

1.创建一个boy类和girl类的接口,然后针对boy类和girl都有两个具体的实现类,分别是新年系列和圣诞系列的。

1.1 boy类的接口
package Factory.sunny.project;

public interface Boy {

    public void drawMan();;
    
}

两个实现类

package Factory.sunny.project;

public class HNBoy implements Boy {

    @Override
    public void drawMan() {
        // TODO Auto-generated method stub
        System.out.println("---------新年男孩---------");
    }

}
package Factory.sunny.project;

public class MCBoy implements Boy {

    @Override
    public void drawMan() {
        // TODO Auto-generated method stub
        System.out.println("----------圣诞男孩------------");
    }

}
1.2  girl类的接口
package Factory.sunny.project;

public interface Girl {

    public void drawWoman();
}

两个实现类

package Factory.sunny.project;

public class HNGirl implements Girl {

    @Override
    public void drawWoman() {
        // TODO Auto-generated method stub
        System.out.println("-----------新年女孩-----------");
    }

}

 

package Factory.sunny.project;
//圣诞系列女孩
public class MCGirl implements Girl {

    @Override
    public void drawWoman() {
        // TODO Auto-generated method stub
    System.out.println("--------圣诞女孩--------");
    }

}

2.接口PersonFactory类提供了两个方法,分别是getBoy()和getGirl()
package Factory.sunny.project;
/**
 * 任务实现接口
 * 
 * */
public interface PersonFactory {

    //男孩接口
    public Boy getBoy();
    
    //女孩接口
    public Girl getGirl();   
}
 
 

 


3.圣诞系列和新年系列工厂实现了PersonFactory类,new出实例对象

 

package Factory.sunny.project;
/**
 * 圣诞系列加工厂
 * 
 * */
public class MCFactory implements PersonFactory {

    @Override
    public Boy getBoy() {
        // TODO Auto-generated method stub
        return new MCBoy();
    }

    @Override
    public Girl getGirl() {
        // TODO Auto-generated method stub
        return new MCGirl();
    }

}

package Factory.sunny.project;
/**
 * 新年系列加工厂
 * 
 * */
public class HNFactory implements PersonFactory {

    @Override
    public Boy getBoy() {
        // TODO Auto-generated method stub
        return new HNBoy();
    }

    @Override
    public Girl getGirl() {
        // TODO Auto-generated method stub
        return new HNGirl();
    }

}

 

4.测试
      //圣诞女孩
    PersonFactory personFactory=new MCFactory();
    Girl girl=personFactory.getGirl();
    girl.drawWoman();
    
    //新年男孩
    PersonFactory personFactory2=new HNFactory();
    Boy boy=personFactory2.getBoy();
    boy.drawMan();    

 

 
 

 

相关文章:

  • 第八十课、多线程中的信号与槽(下)------------------狄泰软件学院
  • Eclipse在线安装hibernate tools插件
  • Laravel 实践之路: 数据库迁移与数据填充
  • Git与TortoiseGit基本操作
  • CHIL-ORACLE-创建非空约束
  • JavaScript思维导图之字符串函数
  • JS实现OO机制
  • Sql Server数据批量更新
  • Linux usb子系统(一) _写一个usb鼠标驱动
  • SylixOS iMX6平台I2C总线驱动
  • HTML初学者常用标签及属性
  • jquery特效 商品SKU属性规格选择实时联动
  • centos
  • Greenplum 简单性能测试与分析
  • 智障的对话
  • #Java异常处理
  • .pyc 想到的一些问题
  • 【刷算法】从上往下打印二叉树
  • CSS居中完全指南——构建CSS居中决策树
  • Github访问慢解决办法
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • isset在php5.6-和php7.0+的一些差异
  • java多线程
  • js ES6 求数组的交集,并集,还有差集
  • js写一个简单的选项卡
  • Just for fun——迅速写完快速排序
  • PhantomJS 安装
  • PHP 的 SAPI 是个什么东西
  • React as a UI Runtime(五、列表)
  • springboot_database项目介绍
  • STAR法则
  • 服务器从安装到部署全过程(二)
  • 基于axios的vue插件,让http请求更简单
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 线上 python http server profile 实践
  • 小程序测试方案初探
  • 国内开源镜像站点
  • 回归生活:清理微信公众号
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • #NOIP 2014# day.2 T2 寻找道路
  • #Z2294. 打印树的直径
  • #控制台大学课堂点名问题_课堂随机点名
  • (1)(1.13) SiK无线电高级配置(五)
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言)字符分类函数
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (二)pulsar安装在独立的docker中,python测试
  • (二)WCF的Binding模型
  • (简单) HDU 2612 Find a way,BFS。
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (转)Unity3DUnity3D在android下调试
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (转载)从 Java 代码到 Java 堆