设计模式之工厂模式

来源:互联网 发布:网络励志名言 编辑:程序博客网 时间:2024/05/01 17:49

工厂模式分为简单工厂模式(simple factory)抽象工厂模式(abstract factory)

简单工厂模式(simple factory)是类的创建模式,又叫静态工厂方法(static factory method)模式

设计一个生产人类的工厂,这个工厂需要分配生产的人来自哪儿

public class Factory {         public static void main(String[] args) {                  People p = PeopleFactory.createPeople(1);                  p.from();                  p = PeopleFactory.createPeople(2);                  p.from();         }}class PeopleFactory {         public static People createPeople(int type) {                  if (type == 1) {                           return new ChinaPeople();                  } else {                           return new EnglishPeople();                  }         }}interface People {         public void from();}class ChinaPeople implements People {         @Override         public void from() {                  System.out.println("我来自中国");         }}class EnglishPeople implements People {         @Override         public void from() {                  System.out.println("我来自英国");         }}



好,这样生产中国人就使type为1就行,当然你是设计者,当然知道type=1就是中国人。

但是这样只能处理类似这样的你需要分配他是哪国的人,消耗资源比较高,可能你从这个工厂生产还要运到某某地方去。

现在就讲抽象工厂模式(abstract factory)

首先完全实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。

现在我们制造工厂,使中国工厂生产中国人,英国工厂生产英国人,这样是不是有效的利用了地方资源,对吧。

public class Test {         public static void main(String[] args) {                  People p = new ChinaFactory().createPeople();                  p.from();                  p = new EnglishFactory().createPeople();                  p.from();         }}interface Factory{         public People createPeople();}class ChinaFactory implements Factory{         public People createPeople() {                  return new ChinaPeople();         }}class EnglishFactory implements Factory{         public People createPeople() {                  return new EnglishPeople();         }}interface People {         public void from();}class ChinaPeople implements People {         public void from() {                  System.out.println("我来自中国");         }}class EnglishPeople implements People {         public void from() {                  System.out.println("我来自英国");         }}


这样就有效的解决了生产复杂产品的结果,统一生产线。

每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结果。

那些书本上的辞藻我就不说了,重在理解,用多了就知道了,(*^__^*) 嘻嘻……


0 0