`
cyxlgzs
  • 浏览: 90111 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java实践之路(设计模式)——工厂模式(抽象工厂)

 
阅读更多

上期回顾:公司在扩大的同时,招的员工不再是只有程序员了。需要招销售员,这样就给原有的结构有了较大的冲击。以前的那个模式已经不再适用,接下来我们将使用抽象工厂模式来解决这个问题。

实现:我们将进一步抽象。不管是程序员还是销售员,都是员工,对于公司招人来说,员工已经可以达到最高抽象级别了

员工接口

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种设计模式——图解——附带源码

    java23种设计模式 工厂模式 ,抽象工厂,建造者模式,单态模式,原型模式

    Java设计模式——工厂设计模式

    抽象工厂模式 面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。 DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对...

    设计模式——JAVA.docx

    JAVA设计模式总结之23种设计模式 一:设计模式之六大原则 总原则:开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。 1.Abstract Factory(抽象工厂模式) 2.Adapter(适配器模式)......

    Java设计模式 版本2

    Java设计模式,目录:前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一...

    java设计模式

    9.3.3 抽象工厂模式的使用场景 9.3.4 抽象工厂模式的注意事项 9.4 最佳实践 第10章 模板方法模式 10.1 辉煌工程—制造悍马 10.2 模板方法模式的定义 10.3 模板方法模式的应用 10.4 模板方法模式的扩展 10.5 最佳实践...

    SETema5:软件设计模式——抽象工厂

    SETema5 软件设计模式——抽象工厂

    Java设计模式:工厂模式——图文+代码示例(通俗易懂)

    先来看看,简单工厂模式——也叫静态工厂模式,这里举个例子:你要去买一台手机,你不用关心手机是怎么生产出来的,里面的零件具体又是怎么制造的,这些通通都交给工厂去处理,你尽管去买手机就好了。 简单工厂模式...

    深入浅出设计模式(中文版电子版)

    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...

    design-pattern-java.pdf

    工厂三兄弟之抽象工厂模式(二) 工厂三兄弟之抽象工厂模式(三) 工厂三兄弟之抽象工厂模式(四) 工厂三兄弟之抽象工厂模式(五) 单例模式-Singleton Pattern 确保对象的唯一性——单例模式 (一) 确保对象的...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷6

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷8

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    管理系统javasal源码-Design-Patterns-Demo:超全的设计模式——理论+实现demo

    Pattern)抽象工厂模式(Abstract Factory Pattern)单例模式(Singleton Pattern)建造者模式(Builder Pattern)原型模式(Prototype Pattern) 2 结构型模式:这些设计模式关注类和对象的组合。继承的概念被用来...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷3

    pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 ...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷1

    pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 ...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷9

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    设计模式Demo

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷10

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷5

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

Global site tag (gtag.js) - Google Analytics