上期回顾:公司在扩大的同时,招的员工不再是只有程序员了。需要招销售员,这样就给原有的结构有了较大的冲击。以前的那个模式已经不再适用,接下来我们将使用抽象工厂模式来解决这个问题。
实现:我们将进一步抽象。不管是程序员还是销售员,都是员工,对于公司招人来说,员工已经可以达到最高抽象级别了
员工接口
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的开闭原则,但具体使用时,如果生产的对象可以确定,那么可以考虑使用简单工厂。
(*文中的例子只是为了说明问题,如有不恰当之处还望见谅)
分享到:
相关推荐
java23种设计模式 工厂模式 ,抽象工厂,建造者模式,单态模式,原型模式
抽象工厂模式 面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。 DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对...
JAVA设计模式总结之23种设计模式 一:设计模式之六大原则 总原则:开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。 1.Abstract Factory(抽象工厂模式) 2.Adapter(适配器模式)......
Java设计模式,目录:前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一...
9.3.3 抽象工厂模式的使用场景 9.3.4 抽象工厂模式的注意事项 9.4 最佳实践 第10章 模板方法模式 10.1 辉煌工程—制造悍马 10.2 模板方法模式的定义 10.3 模板方法模式的应用 10.4 模板方法模式的扩展 10.5 最佳实践...
SETema5 软件设计模式——抽象工厂
先来看看,简单工厂模式——也叫静态工厂模式,这里举个例子:你要去买一台手机,你不用关心手机是怎么生产出来的,里面的零件具体又是怎么制造的,这些通通都交给工厂去处理,你尽管去买手机就好了。 简单工厂模式...
3.3AbstractFactoryPattern(抽象工厂模式) 45 3.3.1定义 45 3.3.2现实例子——扩展了的兵工厂 48 3.3.3C#实例——大陆生态系统 49 3.3.4Java实例——电脑产品 52 3.3.5优势和缺陷 57 3.3.6应用情景 57 3.4...
3.3AbstractFactoryPattern(抽象工厂模式) 45 3.3.1定义 45 3.3.2现实例子——扩展了的兵工厂 48 3.3.3C#实例——大陆生态系统 49 3.3.4Java实例——电脑产品 52 3.3.5优势和缺陷 57 3.3.6应用情景 57 3.4...
工厂三兄弟之抽象工厂模式(二) 工厂三兄弟之抽象工厂模式(三) 工厂三兄弟之抽象工厂模式(四) 工厂三兄弟之抽象工厂模式(五) 单例模式-Singleton Pattern 确保对象的唯一性——单例模式 (一) 确保对象的...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
Pattern)抽象工厂模式(Abstract Factory Pattern)单例模式(Singleton Pattern)建造者模式(Builder Pattern)原型模式(Prototype Pattern) 2 结构型模式:这些设计模式关注类和对象的组合。继承的概念被用来...
pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 ...
pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 ...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...