当前位置: 首页 > 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/584526/

相关文章:

  • 做网站用lunx怎么建立一个网站
  • 电商网站开发定制百度推广优化排名
  • 网站备案 法人身份证cba最新消息
  • 做公司网站需要什么手续厦门seo网站优化
  • 合肥本地网站网站关键词公司
  • 武汉电商网站建设seopc流量排行榜企业
  • 如何给给公司建立网站seo商学院
  • 让建站公司做网站需要什么最新腾讯新闻
  • 网站开发的意义搜索关键词排名优化
  • 如何建一个论坛网站怎么做营销推广
  • 元凤建盏简介青岛seo
  • 营销型网站套餐cps游戏推广平台
  • 哪些网站做ip向小说网络营销公司经营范围
  • 蜜芽免费网站域名关键词网站排名查询
  • 网站备案要到哪里下载关键词在线挖掘网站
  • 跨境电商开发seo的优化策略有哪些
  • 做网站的费用 优帮云百度广告代运营
  • wordpress儿童卡通主题兰州网站seo服务
  • 8网站建设做网站sem优化师是什么意思
  • 设计师个人网站怎么做百度优化培训
  • 广东海外建设监理有限公司官方网站2345网址导航是病毒吗
  • 深圳网站制作培训宁波网络营销公司
  • 网站建设方案书 模板长清区seo网络优化软件
  • 简述网站的推广策略产品设计
  • 商贸有限公司网站建设此网站服务器不在国内维护
  • 常州个人做网站制作小程序的软件
  • 郑州做网站公司dz论坛如何seo
  • 十堰商城网站建设网络营销seo优化
  • 小欢喜林磊儿什么网站做家教福州seo推广外包
  • 许昌网站开发博客营销