类图

抽象披萨商店类

public abstract class PizzaStore {
public void orderPizza(String type) {
AbstractPizza abstractPizza = this.createPizza(type);
abstractPizza.prepare();
abstractPizza.cut();
abstractPizza.bake();
abstractPizza.box();
}
//子类实现
public abstract AbstractPizza createPizza(String type); }

实体披萨商店

public class ChicagoPizzaStore extends PizzaStore {
public AbstractPizza createPizza(String type) {
AbstractPizza pizza = null;
if ("cheesePizza".equals(type)) {
pizza = new CheeseAbstractPizza();
} else if ("greekPizza".equals(type)) {
pizza = new GreekAbstractPizza();
} else if ("pepperoniPizza".equals(type)) {
pizza = new PepperoniAbstractPizza();
}
return pizza;
}
}
public class NYPizzaStore extends PizzaStore {
public AbstractPizza createPizza(String type) {
AbstractPizza pizza = null;
if ("cheesePizza".equals(type)) {
pizza = new CheeseAbstractPizza();
} else if ("greekPizza".equals(type)) {
pizza = new GreekAbstractPizza();
} else if ("pepperoniPizza".equals(type)) {
pizza = new PepperoniAbstractPizza();
}
return pizza;
}
}

抽象披萨

public abstract class AbstractPizza {
public void prepare() {
System.out.println("prepare pizza");
}
public void bake(){
System.out.println("bake pizza");
}
public void cut(){
System.out.println("cut pizza");
}
public void box(){
System.out.println("pizza box");
}
}

实体披萨

public class CheeseAbstractPizza extends AbstractPizza {
@Override
public void prepare() {
System.out.println("prepare CheesePizza");
}
}
public class GreekAbstractPizza extends AbstractPizza {
@Override
public void prepare() {
System.out.println("prepare GreekPizza");
}
}
public class PepperoniAbstractPizza extends AbstractPizza {
@Override
public void prepare() {
System.out.println("prepare PepperoniPizza");
}
}

运行

public class Tester {
public static void main(String[] args) {
PizzaStore pizzaStore = new NYPizzaStore();
PizzaStore pizzaStore1 = new ChicagoPizzaStore();
System.out.println(pizzaStore.createPizza("greekPizza"));
System.out.println(pizzaStore1.createPizza("pepperoniPizza"));
}
}

总结

  1. 面向接口编程,扩展开放
  2. 父类不需要知道子类的具体实现

HeadFirst设计模式---抽象工厂的更多相关文章

  1. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  2. 5. 星际争霸之php设计模式--抽象工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  3. linkin大话设计模式--抽象工厂

    linkin大话设计模式--抽象工厂 在前面讲到的简单工厂里面虽然实现了我们那个类和其中的依赖的解耦,但是在产生我们需要的依赖的那个工厂里面还是和具体的产品类耦合了  现在要是还想彻底解耦的话怎么办呢 ...

  4. HeadFirst设计模式之工厂模式

    一. 1."工厂模式"不是种真正的设计模式,而是一种编程术语 2.The Factory Method Pattern defi nes an interface for crea ...

  5. 设计模式——抽象工厂(Abstract Factory)

    Abstract Factory 抽象工厂模式(创建型模式): new的问题:实现依赖,不能应变应对“具体实例化类型”的变化. 解决思路:--封装变化点:哪里变化,封装哪里           - - ...

  6. JAVA设计模式--抽象工厂模式

    抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...

  7. 深入浅出设计模式——抽象工厂模式(Abstract Factory)

    模式动机在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法.但是有时候我们需要一个工厂可 ...

  8. C#设计模式——抽象工厂

    一.引言 我相信看到这段文字的人,都具备了良好的技术功底.但是对于自己编写的代码总是充满抱怨,希望能够将自己编写的代码如同房子一般先进行有效 的设计,然后在进行建设.那么这篇文章能够给你一些思路,这里 ...

  9. 24种设计模式--抽象工厂模式【Abstract Factory Pattern】

    女娲造人,人是造出来了,世界是热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,忘记给人类定义性别了,那怎么办?抹掉重来,然后就把人类 ...

随机推荐

  1. [20191012]组成rowid.txt

    [20191012]组成rowid.txt --//昨天做了拆分rowid的测试,链接http://blog.itpub.net/267265/viewspace-2659613/=>[2019 ...

  2. 通过GL函数处理图片以及其它相关功能

    我们知道在屏幕后处理里面通过 Graphics.Blit 函数可以通过材质处理屏幕图片, 当我们想要处理一般图片的时候, 直接调用GL函数就行了, 按照习惯自己封装一个 Blit 方法 : ) { i ...

  3. 1.Python爬虫入门_urllib

    #2019-11-22 import urllib.request #Pthon自带的网络连接库 import gzip #解压缩库 #程序入口 if __name__=='__main__': #u ...

  4. pointNet代码

    介绍 组成 1.PointNet classification network分类网络 part segmentation network 数据集 1.point clouds sampled fro ...

  5. PointNet++作者的视频讲解文字版

    转载请注明本文链接: https://www.cnblogs.com/Libo-Master/p/9759130.html PointNet: Deep Learning on Point Sets ...

  6. Git仓库占用空间太大的解决方法

    git gc --aggressive对本地git库进行更彻底清理和优化,这个指令花费的时间也会更长. 胡云飞系统部署搭建整体把控:git gc --auto这是一个设置的指令,并不会进行gc操作.如 ...

  7. 分布式共识算法 (四) BTF算法(区块链使用)

    系列目录 分布式共识算法 (一) 背景 分布式共识算法 (二) Paxos算法 分布式共识算法 (三) Raft算法 分布式共识算法 (四) BTF算法 一.引子 前面介绍的算法,无论是 Paxos ...

  8. yum安装软件报错Error: Nothing to do

    今天在一台新服务器上装一些常用软件,一开始安装ncdu(一个很好用的磁盘分析工具,用来查找大文件),报错如下: 在网上找了各种办法,什么更新yum啊,清理yum缓存啊的,统统没用 最后的找到的问题是, ...

  9. Django-compressor压缩静态文件,逆天!!!!!

    使用django-compressor压缩混淆静态文件 使用django-compressor压缩混淆静态文件 使用django-compressor压缩混淆静态文件 django-compresso ...

  10. mysql id 自增实现

    1.在mysql中建表 2.使用: >insert into 表名 values(id,'www',66); 连续运行5次后结果: =============================== ...