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

贵阳中国建设银行招聘信息网站宣传片拍摄报价

贵阳中国建设银行招聘信息网站,宣传片拍摄报价,研究生计划书模板,wordpress图wp-pic主题文章目录 概念结构实例优化 概念 抽象工厂#xff1a;提供一个创建一系列相关或相互依赖对象的接口#xff0c;而无须指定它们具体的类。 工厂方法是有一个类型的产品#xff0c;也就是只有一个产品的抽象类或接口#xff0c;而抽象工厂相对于工厂方法来说#xff0c;是有… 文章目录 概念结构实例优化 概念 抽象工厂提供一个创建一系列相关或相互依赖对象的接口而无须指定它们具体的类。 工厂方法是有一个类型的产品也就是只有一个产品的抽象类或接口而抽象工厂相对于工厂方法来说是有n个类型的产品也就具有n个产品的抽象类或接口。通俗的来讲就是由生成一个类型的产品转变为生成一组产品这是二者的主要区别两个的相同点是抽象的工厂接口里关联的永远是抽象的产品。 结构 抽象工厂的类图如下 AbstractFactory(抽象工厂)它声明了一组用于创建一族产品的方法每一个方法对应一种产品抽象的产品。 ConcreteFactory(具体工厂)它实现了在抽象工厂中声明的创建产品的方法生成一组具体产品。 AbstractProduct(抽象产品)它为每种产品声明接口在抽象产品中声明了产品所具有的业务方法。 ConcreteProduct(具体产品)它定义具体工厂生产的具体产品对象实现抽象产品接口中声明的业务方法。 实例 现在有海尔和海信两家公司都会生产电视和空调根据这种场景我们可以拆分一下把电视和空调作为产品族海尔和海信两家公司作为两个生产产品的抽象工厂它们都可以生产电视和空调。 空调的抽象产品 public interface HVAC {void displayHVAC(); }海尔空调 public class HaierHVAC implements HVAC {Overridepublic void displayHVAC() {System.out.println(海尔空调);} }海信空调 public class HisenseHAVC implements HVAC{Overridepublic void displayHVAC() {System.out.println(海信空调);} }电视的抽象产品 public interface TV {void displayTV(); }海尔电视 public class HaierTV implements TV{Overridepublic void displayTV() {System.out.println(海尔电视);} }海信电视 public class HisenseHAVC implements HVAC{Overridepublic void displayHVAC() {System.out.println(海信空调);} }抽象的工厂海信工厂和海尔工厂实现该接口 public interface AbstractFactory {TV createTV();HVAC createHVAC(); }海尔工厂 public class HaierFactory implements AbstractFactory{Overridepublic TV createTV() {return new HaierTV();}Overridepublic HVAC createHVAC() {return new HaierHVAC();} }海信工厂 public class HisenseFactory implements AbstractFactory {Overridepublic TV createTV() {return new HisenseTV();}Overridepublic HVAC createHVAC() {return new HisenseHAVC();} }客户端实现 public class Client {public static void main(String[] args) {//创建海尔的空调和电视AbstractFactory haierFactory new HaierFactory();TV haierTV haierFactory.createTV();HVAC haierHVAC haierFactory.createHVAC();haierTV.displayTV();haierHVAC.displayHVAC();} }结果 优化 抽象工厂比工厂方法多了一个产品族的抽象也就是可以在工厂里创建多个产品。当新的公司介入时如长虹公司也来了那就在实现一个长虹公司的工厂实现抽象工厂然后重写里面的方法即可。 但是假如海尔和海信不仅仅生产空调和电视了还想生产冰箱那就需要再增加一个产品这时海尔和海信工厂都需要增加一个生产冰箱的方法假如有n个像海尔和海信这样的工厂那每个工厂都需要重写方法很难扩展。 于是我苦思冥想终于想到了一个方案先说下思路 1、因为当扩展新的产品时就要重写工厂的方法所以这个工厂里我打算只放一个获取产品的方法返回类型是一个抽象的产品。 2、要实现完全的开闭原则不太现实只能减少对原有类的影响要改的话只改动一个类就好所以可以把需要变动的地方都放到一个类中需要变动的点就是扩展新的产品。 3、因为客户面向的是抽象所以在客户端不能出现具体的产品只能出现抽象产品但是可以通过字符串的形式进行传参这样与每个类都没有耦合。 4、因为海尔和海信的工厂是固定的可以在里面出现魔法值。 下面是优化的效果 抽象工厂类只有一个抽象的方法 public interface AbstractFactory {Product create(String type); }海尔工厂类可通过反射获取具体的产品 public class HaierFactory implements AbstractFactory {Overridepublic Product create(String type) {MapString, String productClassNameByType ExtendUtil.getProductClassNameByType(type);String className productClassNameByType.get(haier);Object o null;try {o Class.forName(className).newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return (Product) o;} }海信工厂类 public class HisenseFactory implements AbstractFactory {Overridepublic Product create(String type) {MapString, String productClassNameByType ExtendUtil.getProductClassNameByType(type);String className productClassNameByType.get(hisense);Object o null;try {o Class.forName(className).newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return (Product) o;} }一个工具类用来扩展使用存放产品族和具体产品之间的关系 public class ExtendUtil {private static MapString, MapString, String map new HashMap();static {map new HashMapString, MapString, String() {{MapString, String tvMap new HashMap();tvMap.put(haier, com.tfjybj.ming.design.absfactory.HaierTV);tvMap.put(hisense, com.tfjybj.ming.design.absfactory.HisenseTV);put(tv, tvMap);MapString, String hvacMap new HashMap();hvacMap.put(haier, com.tfjybj.ming.design.absfactory.HaierHVAC);hvacMap.put(hisense, com.tfjybj.ming.design.absfactory.HisenseHVAC);put(hvac, hvacMap);}};}public static MapString,String getProductClassNameByType(String type){return map.get(type);} }最抽象的产品 public interface Product {void display(); }海尔电视 public class HaierTV implements Product {Overridepublic void display() {System.out.println(海尔电视);} }海尔空调 public class HaierHVAC implements Product {Overridepublic void display() {System.out.println(海尔空调);} }海信电视 public class HisenseTV implements Product {Overridepublic void display() {System.out.println(海信电视);} }海信空调 public class HisenseHAVC implements Product{Overridepublic void display() {System.out.println(海信空调);} } 客户端使用 public class Client {public static void main(String[] args) {//创建海尔的空调和电视AbstractFactory haierFactory new HaierFactory();//客户端面向的是抽象Product tv haierFactory.create(tv);Product hvac haierFactory.create(hvac);tv.display();hvac.display();} }如果增加新的产品如冰箱或者新增工厂如长虹电器则需要改动的地方只有这里 欢迎您的观看有问题一起探讨。
http://www.sadfv.cn/news/376925/

相关文章:

  • 网站制作完成之后0元建设黑网站
  • 网站下模板做网站犯法jing.me wordpress主题
  • 中山网站建设方案推广做网站的框架模版
  • 网站建站建设怎么做高端网站定做
  • 织梦模板网站好优化吗普工招聘最新招聘信息
  • 树荫营销网站网站开发中如何制作登录页面
  • 安卓优化大师下载安装到手机快速优化seo软件推广方法
  • 多少钱 网站建设网站开发找聚脑网
  • 重庆工业网站建设网站设计方案怎么写
  • 我有域名跟空间能教我做网站吗wordpress软件下载
  • 网站核验单怎么下载网上推广公司
  • 潍坊云建站模板天元建设集团有限公司第二建筑工程分公司
  • 兰州网站建设网站建设山东省城乡住房建设厅网站
  • 网站配色方案 对比色做MAD生肉网站
  • 祝桥建设网站潍坊网站维护
  • 单位网站建设服务网上房地产官方网
  • 什么是网站内页响应网站 整屏
  • 租凭境外服务器做违规网站服务器做网站用什么系统
  • 南通营销网站建设展厅宣传片
  • 网页设计与制作案例教程答案织梦seo排名优化教程
  • 国外网站设计师wordpress腾讯后台账号
  • 泉州网站平台建设公司下载网站开发
  • 电子商务网站建设与实例心得制作只有一张图片的网站
  • 外贸网站建设哪家快速杭州蚂蚁 做网站的公司
  • 海宁高端高端网站设计手机优化软件哪个好用
  • 易进网站建设推广商务网站欣赏
  • 论述农产品电商网站建设静态旅游网站
  • 小马网站建设室内设计要学哪些科目
  • 会员发布网站建设山东德州网站建设
  • 做自媒体小视频哪个网站比较赚钱中国网湖北官网