Head First---工厂模式
来源:互联网 发布:python写的大型游戏 编辑:程序博客网 时间:2024/05/16 00:45
工厂处理创建对象的细节。
(2)工厂方法:将原本由一个对象负责所有具体类的实例化,变为由一群子类负责实例化。
工厂方法(createPizza)用来处理对象的创建,并将这样的行为封装在子类中。这样,客户程序中关于超类的代码就和子类对象创建代码解耦了。
工厂方法是抽象的,是封装对象的创建,所以依赖子类来处理对象的创建。
工厂方法模式的定义:定义了一个创建对象的接口(此处的接口不仅指抽象类或者接口,还可以指一个方法,如此处就是一个抽象方法),但由子类决定决定要实例化的类是哪一个。
工厂方法让类把实例化推迟到子类。
抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道实际产出的具体产品是什么。这样一来,客户就从具体的产品中解耦。
工厂方法和抽象工厂的区别:工厂方法潜伏在抽象工厂里面,抽象工厂的方法经常以工厂方法的方式实现的,抽象工厂的任务是定义一个负责创建一组
产品的接口。这个接口内的每个方法都负责创建一个具体产品,同时我们利用实现抽象工厂的子类来提供这些具体的做法。
工厂方法和抽象工厂都是负责创建对象,但是工厂方法用的是继承,而抽象工厂用的是组合。
(1)简单工厂:简单工厂其实不是一个模式,比较像一种编程习惯。PizzaStore中由一个对象来负责所有具体Pizza类的实例化。
public class SimplePizzaFatory() { public Pizza createPizza(String type) { Pizza pizza = null;if(type.equals("cheese")) { pizza = new CheesePizza();} else if (type.equals("clam")) { pizza = new ClamPizza();}return pizza;}}public class PizzaStore { SimplePizzaFatory factory;public PizzaStore(SimplePizzaFatory factory) { this.factory = factory;}public Pizza orderPizza(String type) { Pizza pizza = factory.createPizza(type);pizza.prepare();pizza.bake();pizza.cut();pizza.box();return pizza;}}
(2)工厂方法:将原本由一个对象负责所有具体类的实例化,变为由一群子类负责实例化。
工厂方法(createPizza)用来处理对象的创建,并将这样的行为封装在子类中。这样,客户程序中关于超类的代码就和子类对象创建代码解耦了。
工厂方法是抽象的,是封装对象的创建,所以依赖子类来处理对象的创建。
工厂方法模式的定义:定义了一个创建对象的接口(此处的接口不仅指抽象类或者接口,还可以指一个方法,如此处就是一个抽象方法),但由子类决定决定要实例化的类是哪一个。
工厂方法让类把实例化推迟到子类。
abstract Product factoryMethod(String type);
public abstract class PizzaStore {public Pizza orderPizza(String type) { Pizza pizza = createPizza(type);pizza.prepare();pizza.bake();pizza.cut();pizza.box();return pizza;}public abstract Pizza createPizza(String type);}
抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道实际产出的具体产品是什么。这样一来,客户就从具体的产品中解耦。
工厂方法和抽象工厂的区别:工厂方法潜伏在抽象工厂里面,抽象工厂的方法经常以工厂方法的方式实现的,抽象工厂的任务是定义一个负责创建一组
产品的接口。这个接口内的每个方法都负责创建一个具体产品,同时我们利用实现抽象工厂的子类来提供这些具体的做法。
工厂方法和抽象工厂都是负责创建对象,但是工厂方法用的是继承,而抽象工厂用的是组合。
//Pizza原料工厂接口public interface PizzaIngredientFactory { public Dough createDough();public Sauce createSauce();public Clam createClam();}//纽约原料工厂public class NYPizzaIngredientFactory implements PizzaIngredientFactory { public Dough createDough() { return new ThinCrustDough();}public Sauce createSauce() { return new MarinaraSauce();}public Clam createClam() { return new FreshClams();}}//实现芝加哥原料工厂不同之处:生产蛤蜊纽约使用新鲜的蛤蜊FreshClams,而芝加哥工厂不靠海就使用冷冻蛤蜊//Pizza抽象类public abstract class Pizza { Dough dough;Sauce sauce;Clam clam;abstract void prepare();void bake() { // do something.}void cut() { // do something.}void box() { // do something.}}//CheesePizza:让原料工厂去处理区域差异(纽约或者加州的CheesePizza原料Dough和Sauce不一样)public class CheesePizza extends Pizza { PizzaIngredientFactory factory; public CheesePizza(PizzaIngredientFactory factory) { this.factory = factory;}public void prepare() { dough = factory.createDough();sauce = factory.createSauce();// clam 不需要用到}}//ClamPizza:蛤蜊披萨public class ClamPizza extends Pizza { PizzaIngredientFactory factory; public ClamPizza(PizzaIngredientFactory factory) { this.factory = factory;}public void prepare() { dough = factory.createDough();sauce = factory.createSauce();clam = factory.createClam(); //和其他披萨的不同之处,不同原料工厂生产的蛤蜊也不同}}//NYPizzaStorepublic class NYPizzaStore extends Pizza { public Pizza createPizza(String type) { Pizza pizza = null;PizzaIngredientFactory factory = new NYPizzaIngredientFactory();if(type.equals("cheese")) { pizza = new CheesePizza(factory);} else if (type.equals("clam")) { pizza = new ClamPizza(factory);} return pizza;}}
0 0
- Head First---工厂模式
- Head First 工厂模式
- 《Head First-Chapter4》工厂模式
- Head First设计模式-简单工厂模式
- Head First设计模式-工厂模式
- Head First设计模式-抽象工厂模式
- 《Head First 设计模式》工厂模式
- Head First设计模式-简单工厂模式
- Head First设计模式-抽象工厂模式
- 《Head First 设计模式》之工厂模式
- Head First 设计模式 --工厂模式
- Head First设计模式之工厂模式
- Head First-设计模式:工厂模式
- 《Head First 设计模式》之简单工厂
- 简单工厂模式(head first读书笔记)
- 工厂方法模式(head first读书笔记)
- 抽象工厂模式(head first读书笔记)
- <Head First 设计模式>:工厂模式1:方法模式--Pizza
- AbstractHttp11JsseProtocol泛型抽象类
- 开篇
- 加了DNS后,可以ping通外网,但是用浏览器却没办法打开这个可以ping通的网页
- 我对“开源博客”的设想
- MFC之控件和Cstring类型转换篇
- Head First---工厂模式
- OLEDB数据库代码访问
- objective-c快速入门教程(二)
- 笔记《程序员的数学》--感悟之二:余数(%)的妙用
- eclipse修改Android默认签名文件(debug.keystore)
- 浅谈C++的this指针
- 笨小熊
- 小记:编译kernel
- 揭秘:周厉王荒淫无道大肆敛财引起国人不满暴动