java工厂设计模式课件
学习问题
随着经济的全球化,一个软件可能要在全球销售。因此,我们设计的软件应该能够通过简单的配置就可以适应不同的国家。
本讲所学的知识将能提供一种有助于解决此问题的方法。
*
2021/6/18
;
();
();
();
();
;
}
要求制作
这样,方法就成为的客户。
*
2021/6/18
工厂
{
( ) {
;
((“”)){
= ();
} ((“”)){
= ();
} ((“”)){
= ();
}
;
}
}
工厂中定义了 “生产”的方法。所有客户都可以用它来实例化新的对象
这部分代码就是从()方法中抽出来的。和原来的方法一样,也是通过参数确定的种类。
*
2021/6/18
思考一下!
这看来好像我们只是把问题从一个对象推给了另一个对象!这样做有什么好处呢?
可以解除客户代码()与具体的耦合。
可以有许多个客户,这样,当实现改变时我们只需要修改,而不需修改众多的客户。
提高了聚合度,的职责是使用对象, 的职责是决定创建什么样的对象。
*
2021/6/18
重写类
{
;
( ) {
= ;
}
( ) {
;
();
();
();
();
();
;
}
}
*
2021/6/18
简单工厂模式
PizzaStore
orderPizza()
SimplePizzaFactory
createPizza()
Pizza
Prepare()
Bake()
Cut()
Box()
CheesePizza
VeggiePizza
ClamPizza
PepperoniPizza
可以是一个抽象类,也可以是一个接口。
PizzaStore1
orderPizza()
框架
框架的
对外接口
*
2021/6/18
简单工厂模式
Client
orderProduct()
SimpleFactory
createProduct()
AbstractProduct
methodOfProduct()
Product1
Product2
Product3
Productn
有人认为这还不是一个真正的模式,只是一种程序设计的习惯。
*
2021/6/18
授权店
我们的店非常成功,许多人都想开设我们的授权加盟店。
但是,不同地区的加盟店可能希望供应不同口味的。怎么解决这个问题呢?
*
2021/6/18
解决方法之一:建立不同的工厂
建立不同的工厂:如、 、 ,在中包含相应工厂的实例。其代码类似于:
该店提供纽约风味的
()建立一个生产纽约风味的工厂
()建立一个店,引用纽约风味的工厂
(“”)生产的是纽约风味的
该店提供芝加哥风味的
();
();
(“”);
*
2021/6/18
抽象工厂模式
这么多工厂,可以再增加抽象层
让我们一起来设计…
*
2021/6/18
AbstractFactory
createProduct()
ConcreteFactory
createProduct()
*
2021/6/18
另一种解决方法-工厂方法模式
思路:改写的,将()方法放回到,但是声明为抽象方法,然后,为每一种地方风味创建一个的子类。
*
2021/6/18
改造后的的代码
{
( ) {
= ();
();
();
();
();
;
}
( );
}
在内调用自身的一个方法来制造,而不是使用一个对象
对象成了这里的一个抽象方法
下面我们需要的各种子类(对应不同的地区风味)
*
2021/6/18
让子类做决定
PizzaStore
createPizza()
orderPizza()
NYPizzaStore
createPizza()
()
( ) {
((“奶酪")) {
();
} ((“蔬菜")) {
java工厂设计模式课件 来自淘豆网m.daumloan.com转载请标明出处.