首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计形式学习笔记——工厂模式

2012-08-25 
设计模式学习笔记——工厂模式??定义了一个Mobile接口 其中只有一个方法call()?public interface Mobile {pu

设计模式学习笔记——工厂模式


?
?定义了一个Mobile接口 其中只有一个方法call()

?

public interface Mobile {public void call();}

?

不同的手机品牌分别实现,比如现在有Nokia和Moto2个实例

?

public class Nokia implements Mobile{public void call() {System.out.println("Nokia produced");}}public class Moto implements Mobile{public void call() {System.out.println("Moto produced");}}

?

?而之前所说的提取方法,也就是工厂就是MobileFactory,它根据传入的参数来选择实现不同的实例,有一个produceMobile方法

?

public class MobileFactory {public Mobile produceMobile(String s){if(s.equals("Nokia")){return new Nokia();}else{return new Moto();}}}

?

?

简单工厂把主要的工作都放在了工厂中进行判断,返回哪一个实例完全由工厂确定

?

new MobileFactory().produceMobile("Nokia");
?

?

?

?

public interface MobileFactory {public Mobile produceMobile();}

?

public class NokiaFactory implements MobileFactory{public Mobile produceMobile(){return new Nokia();}}public class MotoFactory implements MobileFactory{public Mobile produceMobile() {return new Moto();}}

?

MobileFactory mf=new NokiaFactory();Mobile nokia=mf.produceMobile();

?

public interface MobileFactory {public abstract Nokia produceNokia();public abstract Moto produceMoto();}

?

public class FactoryA implements MobileFactory{public Nokia produceNokia() {return new NokiaA();}public Moto produceMoto() {return new MotoA();}}public class FactoryB implements MobileFactory{public Nokia produceNokia() {return new NokiaB();}public Moto produceMoto() {return new MotoB();}}

?

public interface Nokia{public abstract void call();}

最后是产品类,也就是NokiaA,NokiaB,MotoA,MotoB

?

public class NokiaA implements Nokia{public void call() {System.out.println("NokiaA produced");}}

?

?此时,我们要生产一个NokiaA,就可以执行

?

new FactoryA().produceNokia();

?

?

由于刚看设计模式,参考了很多网上的资料,但是仍然有许多纠结着不明白的地方,比如要是让我说清楚各种工厂方法什么时候该用,就会有些不知道怎么下手,现在只能对着写好的东西去看,去理解

?

3个工厂模式上,个人理解是:

工厂方法是对简单工厂的一种扩展,简单工厂把所有的判断都放在了工厂中,而工厂方法就像是在简单工厂的工厂上又加了一层,从而不再由工厂本身去决定生产那一种实例,而是由实现这个工厂的子类去完成这一工作

抽象工厂和工厂方法上,看了不少网上的资料,有一句话是得到很普遍赞同的

工厂方法是针对一个对象,而抽象工厂模式则是对一个类而言(还是有些一知半解

我现在可以最方便看出的是,工厂方法上,工厂和生产的实例是一一对应的关系,在创建工厂的同时,产生哪一个实例就已经被确定了,而抽象工厂模式,则是对一个组合的应用,类似于拼装的概念,在A类下有abc产品,B类下也有abc产品,这个时候就用到了抽象工厂,有专门生产a、b、c的工厂,而工厂再返回不同类别的产品,这个过程对客户类是不可见的,他看不到期间生产的实例Aa,Ba等等,而只需要去执行产品的方法就可以了

?

希望大家给予纠正,谢谢

另外,我Google浏览器。为什么在上传rar的时候,会传不上来。。。

热点排行