`

设计模式----抽象工厂模式(abstract factory pattern)

 
阅读更多

Human.java代码如下:

package com.designPattern.abstractfactory;

public interface Human {

	public void laugh();
	
	public void cry();
	
	public void talk();
	
	public void sex();
	
}



AbstractBlackHuman.java代码如下:

package com.designPattern.abstractfactory;

public abstract class AbstractBlackHuman implements Human {

	public void cry(){
		System.out.println("黑色人种会哭!");
	}
	
	public void laugh(){
		System.out.println("黑色人种会笑!");
	}
	
	public void talk(){
		System.out.println("黑色人种在聊天!");
	}
}



AbstractWhiteHuman.java代码如下:
package com.designPattern.abstractfactory;

public abstract class AbstractWhiteHuman implements Human{

	public void cry(){
		System.out.println("白色人种会哭!");
	}
	
	public void laugh(){
		System.out.println("白色人种会笑!");
	}
	
	public void talk(){
		System.out.println("白色人种在聊天!");
	}
}



AbstractYellowHuman.java代码如下:
package com.designPattern.abstractfactory;

public abstract class AbstractYellowHuman implements Human{

	public void cry(){
		System.out.println("黄色人种会哭!");
	}
	
	public void laugh(){
		System.out.println("黄色人种会笑!");
	}
	
	public void talk(){
		System.out.println("黄色人种在聊天!");
	}
}



BlackFemaleHuman.java代码如下:
package com.designPattern.abstractfactory;

public class BlackFemaleHuman extends AbstractWhiteHuman{

		public void sex(){
			System.out.println("该黑种人的性别为女性!");
		}
}



BlackMaleHuman.java代码如下:
package com.designPattern.abstractfactory;

public class BlackMaleHuman extends AbstractWhiteHuman{

		public void sex(){
			System.out.println("该黑种人的性别为男性!");
		}
}



WhiteFemaleHuman.java代码如下:
package com.designPattern.abstractfactory;

public class WhiteFemaleHuman extends AbstractWhiteHuman{

		public void sex(){
			System.out.println("该白种人的性别为女性!");
		}
}



WhiteMaleHuman.java代码如下:
package com.designPattern.abstractfactory;

public class WhiteMaleHuman extends AbstractWhiteHuman{

		public void sex(){
			System.out.println("该白种人的性别为男性!");
		}
}



YellowFemaleHuman.java代码如下:
package com.designPattern.abstractfactory;

public class YellowFemaleHuman  extends AbstractYellowHuman{

	public void sex(){
		System.out.println("该黄种人的性别为女性!");
	}
}



YellowMaleHuman.java代码如下:
package com.designPattern.abstractfactory;

public class YellowMaleHuman extends AbstractYellowHuman{

	public void sex(){
		System.out.println("该黄种人的性别为男性!");
	}
}



HumanEnum.java代码如下:
package com.designPattern.abstractfactory;

public enum HumanEnum {

	YellowMaleHuman("com.designPattern.abstractfactoryMethod.YellowMaleHuman"),
	
	YellowFemaleHuman("com.designPattern.abstractfactoryMethod.YellowFemaleHuman"),
	
	WhiteMaleHuman("com.designPattern.abstractfactoryMethod.WhiteMaleHuman"),
	
	WhiteFemaleHuman("com.designPattern.abstractfactoryMethod.WhiteFemaleHuman"),
	
	BlackMaleHuman("com.designPattern.abstractfactoryMethod.BlackMaleHuman"),
	
	BlackFemaleHuman("com.designPattern.abstractfactoryMethod.BlackFemaleHuman");
	
	private String value = "";
	
	private HumanEnum(String value){
		this.value = value;
	}
	
	public String getValue(){
		return this.value;
	}
}



HumanFactory.java代码如下:
package com.designPattern.abstractfactory;

public interface HumanFactory {

	public Human createYellowHuman();
	
	public Human createWhiteHuman();
	
	public Human createBlackHuman();
	
}



AbstractHumanFactory.java代码如下:
package com.designPattern.abstractfactory;

public abstract class AbstractHumanFactory implements HumanFactory{

	protected Human createHuman(HumanEnum humanEnum){
		Human human = null;
		
		if(!humanEnum.getValue().equals("")){
			try{
				human = (Human)Class.forName(humanEnum.getValue()).newInstance();
				
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		
		return human;
	}
}



FemaleHumanFactory.java代码如下:
package com.designPattern.abstractfactory;

public class FemaleHumanFactory extends AbstractHumanFactory{

	@Override
	public Human createYellowHuman() {
		return super.createHuman(HumanEnum.YellowFemaleHuman);
	}

	@Override
	public Human createWhiteHuman() {
		return super.createHuman(HumanEnum.WhiteFemaleHuman);
	}

	@Override
	public Human createBlackHuman() {
		return super.createHuman(HumanEnum.BlackFemaleHuman);
	}

}



MaleHumanFactory.java代码如下:
package com.designPattern.abstractfactory;

public class MaleHumanFactory extends AbstractHumanFactory{

	@Override
	public Human createYellowHuman() {
		return super.createHuman(HumanEnum.YellowMaleHuman);
	}

	@Override
	public Human createWhiteHuman() {
		return super.createHuman(HumanEnum.WhiteMaleHuman);
	}

	@Override
	public Human createBlackHuman() {
		return super.createHuman(HumanEnum.BlackMaleHuman);
	}

}



NvWa.java代码如下:
package com.designPattern.abstractfactory;

public class NvWa {
	
	public static void main(String[] args) {
		
		HumanFactory maleHumanFactory = new MaleHumanFactory();
		
		HumanFactory femaleHumanFactory = new FemaleHumanFactory();
		
		Human maleYellowHuman = maleHumanFactory.createYellowHuman();
		
		Human femaleYellowHuman = femaleHumanFactory.createYellowHuman();
		
		maleYellowHuman.cry();
		maleYellowHuman.laugh();
		maleYellowHuman.talk();
		maleYellowHuman.sex();
		
		femaleYellowHuman.cry();
		femaleYellowHuman.laugh();
		femaleYellowHuman.talk();
		femaleYellowHuman.sex();
	}

}



运行结果如下:

黄色人种会哭!
黄色人种会笑!
黄色人种在聊天!
该黄种人的性别为男性!
黄色人种会哭!
黄色人种会笑!
黄色人种在聊天!
该黄种人的性别为女性!

分享到:
评论

相关推荐

    创建型模式之抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...

    抽象工厂模式(Abstract Factory Pattern)

    ### 抽象工厂模式(Abstract Factory Pattern) #### 引入 在探讨抽象工厂模式之前,我们先回顾一下之前介绍过的简单工厂模式与工厂方法模式。这两种模式主要关注于解决对象创建过程中“new”操作的问题,使得创建...

    java常用设计模式-抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它通过定义一个创建对象的接口来创建对象,但将具体实现的决定留给子类来决定。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式...

    abstract-factory-pattern

    今天,我要为大家介绍的是Java中的抽象工厂模式,这是一种非常实用的设计模式,让我们一起来探索它的魅力吧! 内容概要 本文将从以下几个方面详细介绍Java抽象工厂模式: 抽象工厂模式的应用场景。 抽象工厂模式...

    通过python实现抽象工厂模式(Abstract Factory Pattern).rar

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建一系列相关或相互依赖对象的接口。这个模式使得客户端代码与具体产品的实现解耦,从而提高了系统的灵活性和...

    设计模式 之 “抽象工厂模式[Abstract Factory Pattern]”

    **抽象工厂模式(Abstract Factory Pattern)**是一种创建型设计模式,它提供了一种创建对象族的接口,而无需指定它们的具体类。这种模式是当一个系统需要根据不同的平台或者环境来创建一组相关或相互依赖的对象时,...

    李建忠 C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)

    **抽象工厂模式(Abstract Factory Pattern)是创建型设计模式之一,它提供了一种创建对象的接口,使得子类可以决定实例化哪一个类。这种类型的设计模式属于类的创建模式。** 在C#中,抽象工厂模式的核心在于抽象...

    创建型-抽象工厂模式(Abstract Factory)

    此外,抽象工厂模式还可以与其他设计模式结合使用,比如工厂方法模式(Factory Method Pattern),在某些情况下,可以将抽象工厂模式的抽象工厂类设计为工厂方法模式,让子类决定实例化哪一个类。同时,抽象工厂模式...

    [创建型模式] 设计模式之抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式的关键在于抽象工厂,它定义了一组创建对象的接口,允许子类决定实例化哪一个类。...

    抽象工厂模式abstractFactory

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建对象集合的接口,而无需指定具体的产品类型。这种模式适用于当系统需要在不同平台或环境中创建一组相关或相互依赖的对象时,而这些...

    设计模式之抽象工厂模式-c++

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,提供一个接口用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。这种模式常用于需要跨多个产品系列进行实例化的场景。 抽象工厂模式的...

    c++设计模式-抽象工厂方法

    **抽象工厂方法(Abstract Factory Pattern)**是一种创建型设计模式,它提供了一种创建对象族的接口,而具体的对象族由子类决定。在C++中,这种模式可以帮助我们隔离对象的创建和使用,使得代码更加灵活,易于扩展...

    java设计模式---诙谐易懂版

    例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template ...

    design-pattern-java.pdf

    Factory Method Pattern 工厂三兄弟之工厂方法模式(一) 工厂三兄弟之工厂方法模式(二) 工厂三兄弟之工厂方法模式(三) 工厂三兄弟之工厂方法模式(四) 抽象工厂模式-Abstract Factory Pattern 工厂三兄弟之...

    C#设计模式之抽象工厂(abstract factory)模式示例源代码

    抽象工厂模式(Abstract Factory Pattern)是创建型设计模式的一种,它提供了一个接口用于创建一系列相关的或相互依赖的对象,而无需指定它们具体的类。该模式的核心在于提供一个高层接口来创建一组相关的产品对象。...

    通过java实现抽象工厂模式(Abstract Factory Pattern).rar

    在Java中,抽象工厂模式(Abstract Factory Pattern)同样是一种创建型设计模式,它允许在不指定具体类的情况下创建一系列相关或相互依赖的对象。压缩包文件代码是一个简单的Java实现示例,展示了如何使用抽象工厂...

    设计模式----工厂模式

    3. **抽象工厂模式(Abstract Factory Pattern)**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。抽象工厂模式适用于当需要创建一系列相关对象,且这些对象都属于同一族类时。 工厂模式...

    我讲设计模式--工厂方法

    3. 抽象工厂(Abstract Factory):定义了创建产品对象的接口或抽象方法。 4. 具体工厂(Concrete Factory):实现了抽象工厂定义的接口,负责具体的产品实例化过程,每个具体工厂对应一种类型的产品。 在实际编程...

Global site tag (gtag.js) - Google Analytics