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

中国互联网站建设产品网站系统

中国互联网站建设,产品网站系统,仿网站,织梦招商加盟网站源码文章目录 一、介绍二、基本组件三、演示案例1. 定义抽象工厂2. 定义抽象产品3. 定义具体工厂4. 定义具体产品5. 代码演示6. 代码改造 四、总结 一、介绍 抽象工厂模式(Abstract Factory Pattern)属于创建型设计模式。用于解决比工厂方法设计模式更加复杂的问题。 复杂到哪里了… 文章目录 一、介绍二、基本组件三、演示案例1. 定义抽象工厂2. 定义抽象产品3. 定义具体工厂4. 定义具体产品5. 代码演示6. 代码改造 四、总结 一、介绍 抽象工厂模式(Abstract Factory Pattern)属于创建型设计模式。用于解决比工厂方法设计模式更加复杂的问题。 复杂到哪里了呢 我们将抽象工厂模式和工厂模式进行简单的比较或许可以有更好的理解 工厂方法设计模式中指定工厂只能创建对应的单个产品是一对一的关系。抽象工厂模式中不仅需要创建产品的工厂还多了一个创建工厂的工厂(顶级工厂)。当顶级工厂创建一个工厂时顶级工厂与工厂是一对一的关系(等同于工厂模式)被创建的工厂可以生产多个产品因此顶级工厂与产品之间是一对多的关系。 二、基本组件 在我们使用抽象工厂设计模式时一般需要以下组件 抽象工厂工厂实现抽象产品产品实现 一般来讲从抽象工厂中获取的对象类型为抽象类型其具体类型由具体的工厂实现决定。 三、演示案例 唉到了结婚的年纪了我们就以结婚为例吧。 1. 定义抽象工厂 结婚是一件十分麻烦的事情需要准备非常非常多的事情比如婚车、婚房、婚纱照等等。所以我们以结婚为工厂以婚车婚房婚纱照为产品。先对结婚这件事情做一个规范的定义。 public interface MarriageFactory {/*** 产品 - 婚车*/Car getCar();/*** 产品 - 婚房*/House getHouse();/*** 产品 - 婚纱照*/Picture getPicture();}2. 定义抽象产品 婚车 public interface Car {/*** 坐婚车*/void drive(); }婚房 public interface House {/*** 买房*/void buyHouse(); }婚纱照 public interface Picture {/*** 照相*/void takePicture(); }3. 定义具体工厂 我们结婚一般都是要找一个婚庆公司假设婚庆公司都提供结婚的一条龙服务包括婚车、婚房、婚纱照等业务现在我们城里有两家婚庆公司汤姆婚庆(TomFactory) 和 杰瑞婚庆(JerryFactory)。 汤姆婚庆(TomFactory) 汤姆婚庆公司提供具有汤姆特色的业务如汤姆婚车(TomCar)、汤姆婚房(TomHouse)、汤姆照相(TomPicture)。 public class TomFactory implements MarriageFactory {public TomFactory() {System.out.println(选择了汤姆婚庆公司);}Overridepublic Car getCar() {return new TomCar();}Overridepublic House getHouse() {return new TomHouse();}Overridepublic Picture getPicture() {return new TomPicture();} }杰瑞婚庆(JerryFactory) 杰瑞婚庆公司提供具有杰瑞特色的业务如杰瑞婚车(TomCar)、杰瑞婚房(TomHouse)、杰瑞照相(TomPicture)。 public class JerryFactory implements MarriageFactory {public JerryFactory() {System.out.println(选择了杰瑞婚庆公司);}Overridepublic Car getCar() {return new JerryCar();}Overridepublic House getHouse() {return new JerryHouse();}Overridepublic Picture getPicture() {return new JerryPicture();} }4. 定义具体产品 汤姆婚庆公司提供具有汤姆特色的业务如汤姆婚车(TomCar)、汤姆婚房(TomHouse)、汤姆照相(TomPicture)。 public class TomCar implements Car{/*** 婚车*/Overridepublic void drive() {System.out.println(汤姆婚车开起来...);} }public class TomHouse implements House{/*** 买房*/Overridepublic void buyHouse() {System.out.println(汤姆一品房价50w.....);} }public class TomPicture implements Picture{/*** 照相*/Overridepublic void takePicture() {System.out.println(汤姆照相馆照相.....);} }杰瑞婚庆公司提供的业务具有杰瑞特色如杰瑞婚车(TomCar)、杰瑞婚房(TomHouse)、杰瑞照相(TomPicture)。 public class JerryCar implements Car{/*** 婚车*/Overridepublic void drive() {System.out.println(杰瑞婚车开起来...);} }public class JerryHouse implements House{/*** 买房*/Overridepublic void buyHouse() {System.out.println(杰瑞一品房价30w...);} }public class JerryPicture implements Picture{/*** 照相*/Overridepublic void takePicture() {System.out.println(杰瑞照相馆照相.....);} }5. 代码演示 下面我们对上述案例进行代码演示 选择杰瑞婚庆公司 public static void main(String[] args) {// 选择杰瑞婚庆公司MarriageFactory factory new JerryFactory();Car car factory.getCar();House house factory.getHouse();Picture picture factory.getPicture();car.drive();house.buyHouse();picture.takePicture(); }输出结果 选择汤姆婚庆公司 public static void main(String[] args) {// 选择杰瑞婚庆公司MarriageFactory factory new TomFactory();Car car factory.getCar();House house factory.getHouse();Picture picture factory.getPicture();car.drive();house.buyHouse();picture.takePicture(); }输出结果 6. 代码改造 在上面的测试代码中我们注意到我们只是对new 婚庆公司的实际类型做了修改而产品相关代码没有任何改动。于是我们可以将对婚庆公司的实例化过程按照工厂方法设计模式那样转移到工厂中只需要抽象工厂根据传入的参数返回不同的工厂实例即可。 在抽象工厂中添加静态方法getInstance() 和 枚举类MarriageType static MarriageFactory getInstance(MarriageType type) {if (type.equals(MarriageType.JERRY)) {return new JerryFactory();}return new TomFactory(); }enum MarriageType {JERRY,TOM; }修改测试代码 public static void main(String[] args) {// 选择杰瑞婚庆公司MarriageFactory factory MarriageFactory.getInstance(MarriageFactory.MarriageType.JERRY);Car car factory.getCar();House house factory.getHouse();Picture picture factory.getPicture();car.drive();house.buyHouse();picture.takePicture(); }另外在静态方法getInstance() 中我们可以再次结合单例模式来避免频繁实例化婚庆公司对象。 四、总结 抽象工厂与工厂方法的最主要区别就是抽象工厂允许创建多个产品而工厂方法只允许创建一个产品。该设计模式有一个致命缺点每当我们在工厂中添加新的产品时工厂的抽象和具体实现都需要修改。当工厂的具体实现较多时每一个实现都必须适配新添加的产品。 纸上得来终觉浅绝知此事要躬行。 ————————我是万万岁我们下期再见————————
http://www.hkea.cn/news/14581243/

相关文章:

  • 郴州做网站海南赞赞网络科技有限公司
  • 门户网站的特点和优势安监局网站做模拟
  • 企业公司建网站的步骤网络营销方式的利弊
  • 深圳建设银行网站首页济南集团网站建设价格
  • 网站建设是如何称呼的crm系统排行榜
  • 罗村网站建设公司找别人做网站可以提供源码吗
  • 哈尔滨行业网站北京制作公司网站
  • 网站开发精灵wordpress安装主题后找不到后台入口
  • 网站收录下降原因学校网站设计及代码
  • 营销型网站盈利方案做网站建设价格
  • 青海省公路建设网站洛阳网站推广怎么做
  • 网站推广的方法枫子临海城市建设网站
  • 运动网站模板宁津诚信建设网站
  • 为什么做动漫短视频网站北京快三走势图今天
  • 邵东网站开发厦门人才网个人会员登录
  • 店铺装修设计网网站图片优化怎么做
  • 企业起名网站怎么做wordpress 网膜
  • 建设一个公司网站多少钱个人网站需要几个备案
  • 国内有什么网站阿坝州城乡建设网站
  • 网站建设html实训心得html做网站步骤
  • 怎么自己做网站卖东西wordpress 首页背景音乐
  • 怎样用dw做网站主页wordpress 帝国cmd
  • 龙海市城乡建设局网站网站建设找哪个平台
  • 无锡网站建设无锡速联科技wordpress侧面小工具
  • 网站开发环境lmnp光谷做网站推广公司
  • 网站开发 前端 外包百度搜索推广登录入口
  • 网站的毕业设计怎么做aspnet网站开发作业
  • 昆明高新区网络推广厦门关键词优化报价
  • 西安网站设计公司襄垣网站建设
  • 甘肃住房城乡建设厅网站首页微信小程序代做价格