package DesignPattern;public class AbstractFactory {public static class Dough{}public static class Sauce{}public static class Veggies{}public static class Cheese{}public static class Pepperoni{}public static class Clams{}//披萨public static abstract class Pizza{String name;Dough dough;Sauce sauce;Veggies[] veggies;Cheese cheese;Pepperoni pepperoni;Clams clams;abstract void prepare();public void bake(){System.out.println("Bake for 25 minutes at 350");}public void cut(){System.out.println("Cutting the pizza into diagonal slices");}public void box(){System.out.println("Place pizza in official PizzaStore box");}public void setName(String name){this.name=name;}public String getName(){return name;}}public static class CheesePizza extends Pizza{PizzaIngredientFactory ingredientFactory;public CheesePizza(PizzaIngredientFactory pizzaIngredientFactory){this.ingredientFactory=pizzaIngredientFactory;}void prepare(){System.out.println("Preparing "+name);dough=ingredientFactory.createDough();sauce=ingredientFactory.createSauce();cheese=ingredientFactory.createCheese();}}public static class ClamPizza extends Pizza{PizzaIngredientFactory ingredientFactory;public ClamPizza(PizzaIngredientFactory pizzaIngredientFactory){this.ingredientFactory=pizzaIngredientFactory;}void prepare(){System.out.println("Preparing "+name);dough=ingredientFactory.createDough();sauce=ingredientFactory.createSauce();cheese=ingredientFactory.createCheese();}}//配方工厂public interface PizzaIngredientFactory{Dough createDough();Sauce createSauce();Cheese createCheese();Veggies[] createVegies();Pepperoni createPeperoni();Clams createClams();}//纽约附近的原料public static class ThinCrustDough extends Dough{}public static class MarinaraSauce extends Sauce{}public static class RegginaoCheese extends Cheese{}public static class SlicedPepperoni extends Pepperoni{}public static class FreshClams extends Clams{}//蔬菜public static class Gralic extends Veggies{}public static class Onion extends Veggies{}public static class Mushroom extends Veggies{}public static class RedPeper extends Veggies{}//纽约原料工厂public static class NYPizzaIngredientFactory implements PizzaIngredientFactory{@Overridepublic Dough createDough() {return new ThinCrustDough();}@Overridepublic Sauce createSauce() {return new MarinaraSauce();}@Overridepublic Cheese createCheese() {return new RegginaoCheese();}@Overridepublic Veggies[] createVegies() {Veggies[] veggies ={new Gralic(),new Onion(),new Mushroom(),new RedPeper()};return veggies;}@Overridepublic Pepperoni createPeperoni() {return new SlicedPepperoni();}@Overridepublic Clams createClams() {return new FreshClams();}}//披萨店public static abstract class PizzaStore{public Pizza orderPizza(String type){Pizza pizza=createPizza(type);pizza.prepare();pizza.bake();pizza.cut();pizza.box();return pizza;}abstract Pizza createPizza(String type);}public static class NYPizzaStore extends PizzaStore{@OverridePizza createPizza(String type) {Pizza pizza=null;PizzaIngredientFactory pizzaIngredientFactory= new NYPizzaIngredientFactory();if(type.equals("cheese")){pizza = new CheesePizza(pizzaIngredientFactory);pizza.setName("New York Style Cheese Pizza");}//此处可添加其他类型的披萨return pizza;}}public static void main(String[] args) {PizzaStore nyStore = new NYPizzaStore();Pizza pizza=nyStore.orderPizza("cheese");System.out.println(pizza.name);}/*抽象工厂模式要点在工厂模式分离创建方法和加工流程的基础上,进一步降低原料和加工流程的耦合使得在不同的地点,只需扩展某类原料实现,不用更改原有的原料代码,提高了代码的可重用性或者说抽象工厂模式允许客户接口创建一组相关的产品(比如原料工厂创建一套原料的备料过程)*/
}
设计模式5-抽象工厂模式
转载于:https://www.cnblogs.com/zhouyu0-0/p/10724359.html
相关文章:

wp打印输出日志
System.Diagnostics.Debug.WriteLine(String); 转载于:https://www.cnblogs.com/songtzu/archive/2012/07/26/2609678.html

Element-ui表格选中回显
先瞄一下,是不是你要的效果 然后,废话不多说,直接上代码啦 1 <template>2 <div class>3 <div class"projectData">4 <el-table :data"tableData2" ref"multipleTable" :show…

iOS开发者帐号申请指南
如果你是一个开发团队,在你打算掏腰包购买iOS开发者授权之前,最好先问一下你的同事,是否已经有人获得了开发许可,因为一个开发许可一年内最多可以授权给111个设备来开发测试。如果你没有授权许可可以借用,或者你打算最…

Redis的KEYS命令引起宕机事件
摘要: 使用 Redis 的开发者必看,吸取教训啊! 原文:Redis 的 KEYS 命令引起 RDS 数据库雪崩,RDS 发生两次宕机,造成几百万的资金损失作者:陈浩翔Fundebug经授权转载,版权归原作者所有…

GridView的编辑,更新,取消,删除等功能演示
GridView的编辑,更新,取消,删除等功能演示 这是一个GridView应用的视频,内容很透彻的讲解了GridView的很多实用的技巧。 下载地址:http://download.cnblogs.com/insus/ASPDOTNET/GridViewEditUpdateCancelDelete.rar posted on 2015-12-15 09:20 代码养家…

mac 使用homebrew 安装mysql
1. 安装homebrew ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" brew update 2.安装mysql brew install mysql 3.设置 MySQL 用户以及数据存放地址,下载的mysql的mysql_install_db文件中的路径有错误 需要重新设置一下文件路径&…

触控(Touch) 、 布局(Layout)
1 使用触控实现一个简易的画板 1.1 问题 触控(Touch)是一个UITouch类型的对象,当用户触摸了屏幕上的视图时自动被创建,通常使用触控实现绘图、涂鸦、手写等功能。本案例使用触控实现一个简易的画板,可以在画板上勾画出…

fail-fast和fail-safe的介绍和区别
2019独角兽企业重金招聘Python工程师标准>>> fail-fast和fail-safe 前言 前段时间公司招的实习生在使用迭代器遍历的时候,对集合内容进行了修改,从而抛出ConcurrentModificationException. 然后给他讲解之余也整理了这一篇文章. fail-fast ( 快速失败 ) 在使用迭代器…

hdu 4311 Meeting point-1
http://acm.hdu.edu.cn/showproblem.php?pid4311 思维呀 亲 你想到就可以做出来 想不到就做不出了 什么都不说了 上代码 不知道为什么 在hdu 上 long long 和 int 相乘就让我错 #include<iostream> #include<cstdio> #include<algorithm> #include<c…

Spring Boot 整合Pagehelper(为什么PageHelper分页不生效)
引入包https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter/1.2.10 <!--分页--><!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter --><dependency><groupId>com…

关于javascript的keycode
javascript event对象的具体功能是 event对象只在事件发生的过程中才有效(比如鼠标点击,键盘按下等)。event对象用以表示事件的状态,例如触发event对象的元素(event.srcElement)、鼠标的位置(ev…

SQL-54 查找排除当前最大、最小salary之后的员工的平均工资avg_salary。
题目描述 查找排除当前最大、最小salary之后的员工的平均工资avg_salary。CREATE TABLE salaries ( emp_no int(11) NOT NULL,salary int(11) NOT NULL,from_date date NOT NULL,to_date date NOT NULL,PRIMARY KEY (emp_no,from_date));输出格式:avg_salary69462.5555555556SQ…

JqGridView 1.0.0.0发布
前几个月,客户要求显示列表做到列锁定表头锁定列组合,但从Extjs到Jquery EasyUi,从Jquery Grid到Telerik等等组件,发现无一符合条件,要么只能用列锁定,要么只能用列组合,当两者结合就不行了。于是只好开始自…

Struts2--ActionContext及CleanUP Filter
1. ActionContext ActionContext是被存放在当前线程中的,获取ActionContext也是从ThreadLocal中获取的。所以在执行拦截器、 action和result的过程中,由于他们都是在一个线程中按照顺序执行的,所以可以可以在任意时候在ThreadLocal中获取 Act…

HTML5跳转页面并传值以及localStorage的用法
1、首先,你得在那个页面把数据存入localStorage中吧。这个是必须的! localStorage.setItem("user",JSON.stringify(data.allUser)); 用localStorage的setItem方法,这个方法看名字都知道得差不多了吧。。。setItem把数据存入localSt…

冒泡排序_python实现冒泡排序
冒泡排序是比较经典的面试题, 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经…

30分钟内让你明白正则表达式是什么,并对它有一些基本的了解(二)
测试正则表达式 如果你不觉得正则表达式很难读写的话,要么你是一个搞笑的天才,要么,你不是地球人。正则表达式的语法很令人头疼,即使对经常使用它的人来说也是如此。由于难于读写,容易出错,所以找一种工具对…

(区间dp 或 记忆化搜素 )Brackets -- POJ -- 2955
http://poj.org/problem?id2955 Description We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a regular brackets sequence,if s is a regular brackets sequence, then (s) and [s] are regular brackets sequences…

[初级]深入理解乐观锁与悲观锁
2019独角兽企业重金招聘Python工程师标准>>> 在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。 乐观并发控制(乐观锁…

Umbra 3:次世代的遮挡裁剪
原文链接:http://www.gamasutra.com/view/feature/164660/sponsored_feature_next_generation_.php?print1 来自 Umbra Software [在这个主办方特辑中,Umbra Software讨论了当前使用的大量裁剪遮挡方法的优缺点,并解释了它自己的自动化遮挡…

在64位机上PLSQL连oracle11g问题:SQL*Net not properly installed和ORA-12154:TNS:无法处理服务名...
今天有同事在给客户安装我们的系统时,出现了问题。 背景:同事安装如下: 服务器是小机,在小机上做的虚拟机。WIN2003操作系统,装的是64位的。 数据…

ios 应用和电脑共享文件夹_堪比AirDrop,苹果 iPhone与Windows电脑互传文件的三种方式...
如果你是苹果全家桶用户,一定会对 「AirDrop(隔空投送)」 功能赞誉有加,使用 AirDrop 可以在 iPhone 与 MacBook、iPad 等设备之间快速传递照片、视频或文件。遗憾的是,「AirDrop 仅限苹果设备之间使用」,而很多小伙伴应该和小兽一…

Swift----函数 、 闭包 、 枚举 、 类和结构体 、 属性
1 数组排序 1.1 问题 本案例实现一个整型数组排序的函数,数组排序的规则由传递的规则函数决定。 1.2 方案 首先定义一个整型数组排序函数sortInts,该函数有一个整型数组类型的参数,该参数必须是输入输出参数inout,否则并不能修改数…

shell命令之---Linux文件权限
本章内容 理解Linux的安全性 解读文件权限 使用Linux组 1、Linux的安全性---/etc/passwd文件 # cat /etc/passwdroot:x:0:0:root:/root:/bin/bash/etc/passwd文件的字段包含了如下信息: 登录用户名 用户密码 用户账户的UID(数字形式&#x…

失败原因_解析干洗店失败原因
在市面上我们其实也知道有的店面开张时间不长或者最终没有存活下来,干洗店也不例外。我们在看到各地干洗店的高额利润的同时,也会发现一些失败的干洗店。他们的干洗店为何难以运营下去呢?下面伊斯曼小编来在多个方面剖析一下其中的蹊跷和缘由࿱…

seg:NLP之正向最大匹配分词
已迁移到我新博客,阅读体验更佳seg:NLP之正向最大匹配分词 完整代码实现放在我的github上:click me 一、任务要求 实现一个基于词典与规则的汉语自动分词系统。二、技术路线 采用正向最大匹配(FMM)方法对输入的中文语句进行分词,具体的实现可以分为下面几个步骤&…

喷涂机器人保养应该注意的七个事项
喷涂机器人又叫喷漆机器人(spray painting robot), 是可进行自动喷漆或喷涂其他涂料的工业机器人。目前市面上采用比较多的品牌有ABB、库卡、发那科等等,长时间的使用能加速工业机器人的老化,保养是延缓机器人老化的一大关键,那么…

K均值与C均值区别
k均值聚类:---------一种硬聚类算法,隶属度只有两个取值0或1,提出的基本根据是“类内误差平方和最小化”准则; 模糊的c均值聚类算法:-------- 一种模糊聚类算法,是k均值聚类算法的推广形式,隶…

中超赛程来100wan点in_不干了:中超球队改名“硬重启”,球迷组织绝望解散
聚焦中超和CBA,独一无二球迷媒体点击右上角关注,你不会后悔的...2021赛季中超注定会与众不同,足协的新规将陆续实施,如果降薪还在外界意料之中的话,那么更改中性化名字的要求则让多数俱乐部较为头疼,尤其是…

微博polg什么意思_贾磊:广东发微博给CBA造成了负面影响 方硕的意思可能没表达清楚...
直播吧11月5日讯 近日做客一档节目时,著名篮球记者贾磊谈到了前天晚上的京粤大战。贾磊谈到了王骁辉伸腿绊倒威姆斯一事:“我觉得这场比赛,王骁辉的这个动作,大家都看的非常清楚,确实是一个犯规,也给威姆斯…