### 工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。(摘抄)
工厂方法模式和简单工厂模式都是用于去创建新的类,但是工厂方法模式传承了简单工厂模式封装对象创建的过程,同时也改掉了简单工厂模式违背开放——封闭原则的缺点。
简单工厂模式,如果需要生产/去掉一个子类的话,那么需要在SimpleFactory类中修改 switch case 语句,所以违背了开放——封闭原则。
工厂方法创建对象是通过子工厂来创建,所以添加或删除子类的话是不需要改变原有的代码的。
~~~
class Factory
{
public Product create() {
// TODO Auto-generated method stub
return null;
}
}
class AFactory extends Factory
{
public Product create() {
// TODO Auto-generated method stub
return new AProduct();
}
}
class BFactory extends Factory
{
public Product create() {
// TODO Auto-generated method stub
return new BProduct();
}
}
class Product
{
public void domethod() {
// TODO Auto-generated method stub
}
}
class AProduct extends Product
{
public void domethod() {
// TODO Auto-generated method stub
}
}
class BProduct extends Product
{
public void domethod() {
// TODO Auto-generated method stub
}
}
//新增类
class CFactory extends Factory
{
public Product create()
{
return new CProduct();
}
}
class CProduct extends Product
{
public void domethod()
{
}
}
public static void main()
{
Factory factory = new AFactory();
Product product = factory.create();
product.domethod();
//新增一个类的话,那么只需要添加,而不需要修改原有代码,因为生产类的判断交给了客户端
factory = new CFactory();
Product newP = factory.create();
newP.domethod();
}
~~~
工厂方法模式差不多也就这样,还是那句话实际使用中必须活学活用,多种模式结合出来的四不像模式,也许才是正确的使用方法。。。
话说《大话》的例子越来越扯了。。。感觉解释还是蛮清楚,就是例子有点蛋疼,但是我也还蛮佩服作者,这样子也可以圆过来。。。
好希望自己把这本书看完之后,可以去看下那本Gof写的原版的设计模式,正好提升一下英文水平
- 前言
- (1)代码无错就是优?——简单工厂模式
- (2)商场促销——策略模式
- (3)&(4)&(5) 设计模式原则
- (6)穿什么有这么重要?——装饰模式
- (7)为别人做嫁衣——代理模式
- (8)雷锋依然在人间——工厂方法模式
- (9)简历复印——原型模式
- (10)考题抄错会做也白搭——模板方法模式
- (11)迪米特法则
- (12)牛市股票还会亏钱?—— 外观模式
- (13)好菜每回味不同——建造者模式
- (14)老板回来,我不知道——观察者模式
- java实现事件委托
- (15)就不能不还DB吗?—— 抽象工厂模式
- (16)无尽加班何时休息——状态模式
- (17)在NBA我需要翻译——适配器模式
- (18)如果再回到从前——备忘录模式
- (19)分公司=部门——组合设计模式
- (20)想走?可以!先买票——迭代器模式
- (21)有些类也需计划生育——单例模式
- (22)手机软件何时统一——桥接模式
- (23)烤羊肉串引来的思考——命令模式
- (24)加薪非要老总批?——职责链模式
- (25)世界需要和平——中介者模式
- (26)项目多也别傻做——享元模式
- (28)男人和女人——访问者模式