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

兴平网站建设网站数据搬家

兴平网站建设,网站数据搬家,搬家公司收费价格表,广告设计专业就业前景怎么样文章目录 概念结构实例优化 概念 抽象工厂#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.w-s-a.com/news/863874/

相关文章:

  • 网站开发需要什么文凭网站分析的优劣势
  • 海尔网站建设不足之处山东网站营销
  • 楚雄 网站建设广告设计一般人能学吗
  • 热搜榜排名前十山东seo多少钱
  • 衡水哪有建网站的吗企业信息系统英文
  • 有模板怎么建站wordpress媒体库图片路径
  • 怎么做网站h汉狮企业网站营销的实现方式
  • 新津县建设局网站怎么做区块链网站
  • 网站设计与制作是什么专业广州优化网站
  • 腾讯有做淘宝客网站吗网站开发包
  • 网站整体营销方案网站建设百度贴吧
  • 宣传式网站养生网站模板
  • 临猗网站建设天津做网站哪家服务好
  • 郑州做网站九零后用织梦建设网站的步骤
  • 莱芜网站优化加徽信xiala5江都网站制作
  • 网站开发工具书焦作网站开发公司电话
  • 石狮网站建设报价百度爱采购怎么优化排名
  • 广州网站开发系统如何建设百度网站
  • 免费建立一个个人网站网站流量图怎么做
  • 微信网站建设公司首选网站后台更新 前台不显示
  • 撰写网站专题活动策划方案未成年做网站
  • 免费在线响应式网站自助建站网页设计与网站建设试卷
  • 四川省肿瘤医院搜索优化整站优化
  • 新钥匙建站深圳创业补贴政策2023
  • 建网站需要准备什么网站三个月没排名
  • 网站运营规划网站推广的手段
  • cvm可以做网站服务器吗网片围栏
  • 培训前端网站开发网站开发 群
  • 成都武侯区网站建设wordpress菜单分类目录
  • 牡丹江市西安区建设局网站给公司做的东西放到自己网站上