Java实践之路(设计模式)——工厂模式(抽象工厂)
2011-12-16 22:43
513 查看
上期回顾:公司在扩大的同时,招的员工不再是只有程序员了。需要招销售员,这样就给原有的结构有了较大的冲击。以前的那个模式已经不再适用,接下来我们将使用抽象工厂模式来解决这个问题。
实现:我们将进一步抽象。不管是程序员还是销售员,都是员工,对于公司招人来说,员工已经可以达到最高抽象级别了
员工接口
程序员接口
java程序员
csharp程序员
php程序员
ruby程序员
销售员接口
java销售员
csharp销售员
公司职能
java开发部门
php开发部门
Ruby开发部门
java销售部门
csharp销售部门
创建好了,现在我需要一个java销售人员
完美的工作着……
接下来我需要找一个清洁工
创建清洁部门
清洁工开始工作
原来的代码不需要任何的变动,只需要增加相应的员工和部门就好了。
总结:工厂模式分为三种:简单工厂、工厂方法和抽象工厂。在使用时首先要确定工厂生产的类别是否唯一,如果是可以考虑前两种,如果不是需要使用第三种。工厂方法比简单工厂更开放,更符合OO的开闭原则,但具体使用时,如果生产的对象可以确定,那么可以考虑使用简单工厂。
(*文中的例子只是为了说明问题,如有不恰当之处还望见谅)
实现:我们将进一步抽象。不管是程序员还是销售员,都是员工,对于公司招人来说,员工已经可以达到最高抽象级别了
员工接口
public interface Employee { void work(); }
程序员接口
public interface Programmer extends Employee { }
java程序员
public class JavaProgrammer implements Programmer{ public void work() { System.out.println("I am develop java softeware"); } }
csharp程序员
public class CsharpProgrammer implements Programmer { public void work() { System.out.println("I am develop csharp softeware"); } }
php程序员
public class PhpProgrammer implements Programmer { public void work() { System.out.println("I am develop php softeware"); } }
ruby程序员
public class RubyProgrammer implements Programmer { public void work() { System.out.println("I am develop ruby softeware"); } }
销售员接口
public interface Seller extends Employee { }
java销售员
public class JavaSeller implements Seller { public void work() { System.out.println("I am selling java software"); } }
csharp销售员
public class CsharpSeller implements Seller { public void work() { System.out.println("I am selling csharp software"); } }
公司职能
public interface AbstractFactory { Employee getEmployee(); }
java开发部门
public class JavaFactory implements AbstractFactory { public Employee getEmployee() { return new JavaProgrammer(); } }csharp开发部门
public class CsharpFactory implements AbstractFactory { public Employee getEmployee() { return new CsharpProgrammer(); } }
php开发部门
public class PhpFactory implements AbstractFactory { public Employee getEmployee() { return new PhpProgrammer(); } }
Ruby开发部门
public class RubyFactory implements AbstractFactory { public Employee getEmployee() { return newRubyProgrammer(); } }
java销售部门
public class JavaSellerFactory implements AbstractFactory { public Employee getEmployee() { return new JavaSeller(); } }
csharp销售部门
public class CsharpSellerFactory implements AbstractFactory { public Employee getEmployee() { return new CsharpSeller(); } }
创建好了,现在我需要一个java销售人员
public static void main(String[] args) { System.out.println("I want a java seller"); AbstractFactory factory=new JavaSellerFactory(); Employee seller=factory.getEmployee(); seller.work(); }
完美的工作着……
接下来我需要找一个清洁工
public class Cleaner implements Employee { public void work() { System.out.println("I am cleaning......"); } }
创建清洁部门
public class CleanFactory implements AbstractFactory { public Employee getEmployee() { return new Cleaner(); } }
清洁工开始工作
public static void main(String[] args) { System.out.println("I want a cleaner"); AbstractFactory factory=new CleanFactory(); Employee seller=factory.getEmployee(); seller.work(); }
原来的代码不需要任何的变动,只需要增加相应的员工和部门就好了。
总结:工厂模式分为三种:简单工厂、工厂方法和抽象工厂。在使用时首先要确定工厂生产的类别是否唯一,如果是可以考虑前两种,如果不是需要使用第三种。工厂方法比简单工厂更开放,更符合OO的开闭原则,但具体使用时,如果生产的对象可以确定,那么可以考虑使用简单工厂。
(*文中的例子只是为了说明问题,如有不恰当之处还望见谅)
相关文章推荐
- Java实践之路(设计模式)——工厂模式(简单工厂)
- Java实践之路(设计模式)——工厂模式(工厂方法)
- Java设计模式——抽象工厂(Abstract Factory)以及工厂模式总结
- 新手学习java设计模式之路——工厂模式
- Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)
- Java设计模式之-----工厂模式(简单工厂,抽象工厂)
- 设计模式讲解与代码实践(一)——抽象工厂
- C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)
- JAVA常用设计模式总结(单例,工厂,抽象工厂)
- java设计模式之单例模式、工厂模式
- java学习之路-----设计模式---工厂模式
- Java设计模式——工厂模式
- java设计模式之一工厂模式(Factory Method)
- java设计模式-工厂模式
- C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)zz
- 学习:java设计模式—工厂模式
- 学习:java设计模式—工厂模式
- 浅谈Java设计模式(一)工厂模式
- 一起学Java设计模式--抽象工厂方法模式(创建型模式)
- java学习之路---设计模式---动态代理