HeadFirst设计模式---简单工厂
简单工厂的理解
简单工厂不是设计模式的一种,只是代码规范而且。也就是说构造一个披萨工厂出来,按不同味道生产不同的披萨。
类图

抽象披萨
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 SimpleFactory {
    public AbstractPizza createPizza(String type) {
        if ("cheesePizza".equals(type)) {
            return new CheeseAbstractPizza();
        } else if ("greekPizza".equals(type)) {
            return new GreekAbstractPizza();
        } else if ("pepperoniPizza".equals(type)) {
            return new PepperoniAbstractPizza();
        }
        return null;
    }
}
披萨商店
public class PizzaStore {
    SimpleFactory simplefactory = null;
    PizzaStore(SimpleFactory simplefactory){
        this.simplefactory = simplefactory;
    }
    public void orderPizza(String type) {
        AbstractPizza abstractPizza = simplefactory.createPizza(type);
        abstractPizza.prepare();
        abstractPizza.cut();
        abstractPizza.bake();
        abstractPizza.box();
    }
    public static void main(String[] args) {
        PizzaStore store = new PizzaStore(new SimpleFactory());
        store.orderPizza("cheesePizza");
    }
}
运行结果
prepare CheesePizza
cut pizza
bake pizza
pizza box
总结
- 简单工厂代码简单,易理解。
- 提供一个入参,可以得到相应的对象
- 违背了开闭原则
HeadFirst设计模式---简单工厂的更多相关文章
- 3. 星际争霸之php设计模式--简单工厂模式
		题记==============================================================================本php设计模式专辑来源于博客(jymo ... 
- java设计模式--简单工厂
		java设计模式--简单工厂 简单工厂不是一个标准的设计模式,但是很常用需要掌握. 在java应用开发中,要"面向接口编程". 1.java中接口的概念: 在java中接口是一种特 ... 
- Golang设计模式—简单工厂模式(Simple Factory Pattern)
		Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ... 
- HeadFirst设计模式之工厂模式
		一. 1."工厂模式"不是种真正的设计模式,而是一种编程术语 2.The Factory Method Pattern defi nes an interface for crea ... 
- C++设计模式——简单工厂模式
		简单工厂模式(Simple Factory Pattern) 介绍:简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些.因为它至少不是Gof23种设计模式之一.但它在实际的编程中经常被用 ... 
- java设计模式--简单工厂模式
		简单工厂设计模式 工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式.它定义一个用于创建对象的接口,由子类决定实例化哪一个类. 核心知识点如下: (1) 大 ... 
- C#设计模式-简单工厂
		工厂模式专门负责将大量有共同接口的类实例化.工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类.工厂模式有以下几种形态: 简单工厂(Simple Factory)模式 工厂方法(F ... 
- 深入浅出设计模式——简单工厂模式(Simple Factory)
		介绍简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些.因为它至少不是Gof23种设计模式之一.但它在实际的编程中经常被用到,而且思想也非常简单,可以说是工厂方法模式的一个引导,所以我想 ... 
- 设计模式--简单工厂(Factory)模式
		温故而知新,看了以前写的博文<Asp.net读取Excel文件 2>http://www.cnblogs.com/insus/archive/2011/05/05/2037808.html ... 
随机推荐
- 【原创】CentOS 7 安装解压版mysql5.7
			1.将mysql压缩包解压至 /usr/local 文件夹下,将其改名为mysql #解压 tar -zxf mysql-5.7.27-el7-x86_64.tar.gz -C /usr/local/ ... 
- cobalt strike入门和防护
			1.入门: https://blog.csdn.net/localhost01/article/details/86741124 2.cs的防护: 由于关乎渗透人员自身的安全,建议大家好好看看,这里贴 ... 
- redis 进程使用root用户启动 -- 整改方案
			最近内部风险整改, 各种进程使用root身份进行启动不符合要求, 于是各路神仙各施其法,为的就是让 某进程不以root 启动: 先以 redis 为例: 原有进程如下: #超一流标准的执行文件位置及配 ... 
- [C4] Andrew Ng - Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization
			About this Course This course will teach you the "magic" of getting deep learning to work ... 
- MDK编译优化笔记
			在一次使用MDk的编译优化等级比较高的时候发现编译不优化时功能正常,开了优化等级02就出现异常,调试中看了很多博客总结一下. 一个变量,如果你的主程序要用到,同时中断还要用到,要加volatile修饰 ... 
- 分布式共识算法 (四) BTF算法(区块链使用)
			系列目录 分布式共识算法 (一) 背景 分布式共识算法 (二) Paxos算法 分布式共识算法 (三) Raft算法 分布式共识算法 (四) BTF算法 一.引子 前面介绍的算法,无论是 Paxos ... 
- Spring Cloud Sleuth+ZipKin+ELK服务链路追踪(七)
			序言 sleuth是spring cloud的分布式跟踪工具,主要记录链路调用数据,本身只支持内存存储,在业务量大的场景下,为拉提升系统性能也可通过http传输数据,也可换做rabbit或者kafka ... 
- linq,skip(),take实现分页
			using (AdventureWorks2012Entities db = new AdventureWorks2012Entities()) { int num = (from stu in db ... 
- [.NET] 控制只启动单个指定外部程序
			独立观察员 2019 年 6 月 12 日 有的时候我们程序需要启动外部程序来配合实现某些功能,比如启动一个 Cef 相关程序来承载网页.那么如果那个外部程序并没有实现单例启动,我们程序去启动它的时候 ... 
- Linux查看日志常用命令(转载)
			转自: https://www.cnblogs.com/kbkiss/p/7567725.html -------------------------------------------------- ... 
