首页 > 代码库 > 设计模式之工厂模式-工厂方法(02)
设计模式之工厂模式-工厂方法(02)
接着上一篇的工厂模式,工厂方法。由于简单工厂的扩展性不好,下面工厂方法,在这上面有了优化!
(二)工厂方法(多态工厂模式)
工厂方法描述:定义一个创建产品对象的工厂接口(总厂是接口,里面只规定了获得具体产品实例的方法),实际创建工作推迟到实现总厂接口的子类当中。这样的好处是,可以在不修改具体工厂角色的情况下引进新的产品(即是不像简单工厂那样,增加一个具体产品,比如:增加了个浙大学生,要把在工厂中的方法中增加逻辑判断,),利于维护了;
工厂方法的角色及其职责:(1)抽象工厂角色[creator]:该模式的核心(总厂),任何工厂(分厂)都必须实现这个接口(2)具体工厂角色[concrete creator](即分厂):具体工厂类是抽象工厂的一个实现,负责实例化产品对象;(3)抽象产品角色[product]:工厂方法所创建的所有对象的父类,他负责描述所有实例所共有的公共接口(4)具体产品[concrete product]:所创建的具体实例对象
(1)抽象工厂角色(总厂)
1 package com.sb.factory.method; 2 3 //抽象工厂角色类 4 //获得学生的工厂,这个是总厂,是个接口 5 public interface StudentFactory { 6 7 //获得学生的方法,这个方法也可以写成静态的 8 public Student getStudent(); 9 10 11 }
(2)具体工厂角色(分厂)
2.1)北大工厂
1 package com.sb.factory.method; 2 3 //北大工厂 4 public class PekingUStudentFactory implements StudentFactory { 5 6 @Override 7 public Student getStudent() { 8 9 return new PekingUStudent(); 10 } 11 12 }
2.2)清华工厂
1 package com.sb.factory.method; 2 3 //清华工厂 4 public class TsinghuaUStudentFactory implements StudentFactory { 5 6 @Override 7 public Student getStudent() { 8 9 return new TsinghuaUStudent(); 10 } 11 12 }
2.3)复旦工厂
1 package com.sb.factory.method; 2 3 //复旦工厂 4 public class FudanUStudentFactory implements StudentFactory { 5 6 @Override 7 public Student getStudent() { 8 9 return new FudanUStudent(); 10 } 11 12 }
(3)抽象产品角色
1 package com.sb.factory.method; 2 3 //学生接口 4 //抽象角色 5 public interface Student { 6 //显示校训 7 void showXiaoXun(); 8 }
(4)具体产品
4.1)北大学生
1 package com.sb.factory.method; 2 3 //北京大学(Peking University),北大的 4 public class PekingUStudent implements Student{ 5 6 //北大校训 7 public void showXiaoXun(){ 8 System.out.println("爱国、进步、民主、科学"); 9 } 10 11 12 }
4.2)清华学生
1 package com.sb.factory.method; 2 3 //清华大学(Tsinghua University),清华的 4 public class TsinghuaUStudent implements Student{ 5 6 //清华校训 7 public void showXiaoXun(){ 8 System.out.println("自强不息,厚德载物 "); 9 } 10 11 }
4.3)复旦学生
1 package com.sb.factory.method; 2 3 //清华大学(Tsinghua University),清华的 4 public class TsinghuaUStudent implements Student{ 5 6 //清华校训 7 public void showXiaoXun(){ 8 System.out.println("自强不息,厚德载物 "); 9 } 10 11 }
测试代码:
1 package com.sb.factory.method; 2 3 public class Test { 4 5 public static void main(String[] args) { 6 7 //工厂方法的方式,就是把工厂扩大了,原来就是叫学生工厂,现在都有具体的分厂了(呵呵) 8 //比如,现在想招北大的学生,直接去北大工厂去拿,所以先实例化北大工厂, 9 StudentFactory pekingStufactory = new PekingUStudentFactory(); 10 //拿到一个北大的学生 11 Student pekingStu = pekingStufactory.getStudent(); 12 //回答校训 13 pekingStu.showXiaoXun(); 14 15 //同样,可以去拿清华,复旦的学生 16 StudentFactory tsingStuFactory = new TsinghuaUStudentFactory(); 17 Student tsingStu = tsingStuFactory.getStudent(); 18 tsingStu.showXiaoXun(); 19 20 StudentFactory fudanStudentFactory = new FudanUStudentFactory(); 21 Student fudanStu = fudanStudentFactory.getStudent(); 22 fudanStu.showXiaoXun(); 23 24 } 25 26 }
测试结果:
总结:总厂是接口,分厂实现接口,抽象产品规定公共的行为,具体产品表现自己的内容;每个分厂对应生产一个具体的产品;
下一篇:抽象工厂
设计模式之工厂模式-工厂方法(02)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。