读书人

关于设计方式的个人小解

发布时间: 2012-12-19 14:13:14 作者: rapoo

关于设计模式的个人小解

一 单例模式: 一个类只能实例化一个具体对象

?

?

二.抽象工厂模式:

-----------------------------------copy other's blog :

NYPizzaFactory nyFactory = new NYPizzaFactory();PizzaStore nyStore = new PizzaStore(nyFactory);nyStore.orderPizza("Veggie");ChicagoPizzaFactory chicagoFactory = new ChicagoPizzaFactory();PizzaStore chicagoStore = new PizzaStore(chicagoFactory);nyStore.orderPizza("Veggie");?

?

public abstract class PizzaStore {public Pizza orderPizza(String type){Pizza pizza;//现在createPizza()方法从工厂对象中移回PizzaStorepizza = createPizza(type);pizza.prepare();pizza.bake();pizza.cut();pizza.box();return pizza;}abstract Pizza createPizza(String type);}?

?

public class NYPizzaStore extends PizzaStore {@OverridePizza createPizza(String type) {if(type.equals("cheese")) {return new NYStyleCheesePizza();} else if(type.equals("veggie")) {return new NYStyleVeggiePizza();} else if(type.equals("pepperoni")) {return new NYStylePepperoniPizza();} else {return null;}}}?

?

abstract Product factoryMethod(String type);?

?

import java.util.ArrayList;public abstract class Pizza {String name;String dough;String sauce;ArrayList toppings = new ArrayList();void prepare() {System.out.println("Preparing " + name);System.out.println("Tossing dough...");System.out.println("Adding sauce...");System.out.println("Adding toppings: ");for(int i=0;i<toppings.size();i++) {System.out.println(" " + toppings.get(i));}}void bake() {System.out.println("Bake for 25 minutes at 350");}void cut() {System.out.println("Cutting the pizza into diagonal slices");}void box() {System.out.println("Place pizza in official PizzaStore box");}public String getName() {return name;}}?

?

public class NYStyleCheesePizza extends Pizza {public NYStyleCheesePizza() {name = "NY Style Sauce and Cheese Pizza";dough = "Thin Crust Dough";sauce = "Marinara Sauce";toppings.add("Grated Reggiano Cheese");}}?

?

public class ChicagoStyleCheesePizza extends Pizza {public ChicagoStyleCheesePizza() {name = "Chicago Style Deep Dish Cheese Pizza";dough = "Extra Thick Crust Dough";sauce = "Plum Tomato Sauce";toppings.add("Shredded Mozzarella Cheese");}void cut() {System.out.println("Cutting the pizza into square slices");}}?

?

public class PizzaTestDrive {public static void main(String[] args) {PizzaStore nyStore = new NYPizzaStore();Pizza pizza = nyStore.orderPizza("cheese");System.out.println("Order a " + pizza.getName() + "/n");}}?

?

工厂方法的子类看起来很像简单工厂,但他们却不一样。简单工厂把全部的事情,在一个地方都处理完了,然而工厂方法却是创建一个框架,让子类决定要如何实现。比方说,在工厂方法中,orderPizza()方法提供了一半的框架,以便创建比萨,orderPizza()方法依赖工厂方法创建具体类,并制造出实际的比萨。课通过继承PizzaStore类,决定实际制造出的比萨是什么。简单工厂的做法,可以将对象的创建封装起来,但是简单工厂不具备工厂方法的弹性,因为简单工厂不能变更正在创建的产品。

-------------------------------------------------

以上写的很烂。我也没有细看。总结如下:

1。定义pizzaStore抽象类,定义订单系统OrderPizza(),所有子类均需使用该方法。定义抽象的pizza制作方法createPizza,每个子类可以有自己的制作方法

2.定义Pizza? 抽象类。定义一些方法

3.定义工厂方法

4. 各自子类集成pizzaStore

5. 定义PizzaTestDrive方法,在该方法里面,具体化子类商店,各自不同的子类产生订单

?

--------比较乱!!!!

?

?

?

三. 观察者模式:

GoF说道:Observer模式的意图是“定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新”。从这段话里我们可以得到两个信息,如下:

1, 观察者(具体执行操作的对象,有多个)
2, 被观察者(顾名思义是被观察的对象,如果该对象发生某些变化则通知观察者执行对应的操)

参照http://www.iteye.com/topic/102068/。

?

?

读书人网 >软件开发

热点推荐