网上列子,创造三种不同的人
静态工程模式:
public interface Human {
public void getColor();//人有不同的颜色
public void talk(); //人会说话
}
Human接口的不同实现:
public class BlackHuman implements Human {// 黑种人
@Override
public void getColor() {
System.out.println("Black");
}
@Override
public void talk() {
System.out.println("Black man");
}
}
public class Human implements Human { //黄种人
@Override
public void getColor() {
System.out.println("Yellow");
}
@Override
public void talk() {
System.out.println("Yellow man");
}
}
public class WhiteHuman implements Human {//白种人
@Override
public void getColor() {
System.out.println("White");
}
@Override
public void talk() {
System.out.println("White man");
}
}
模型:必须传入Human的实现类
public abstract class AbstractHumanFactory{
public abstract <T extends Human> T createHuman(Class<T> clazz); //注意这里T必须是Human的实现类才行,因为要造Human嘛
}
实现具体模型:
public class HumanFactory extends AbstractHumanFactory {
@Override
public <T extends Human> T createHuman(Class<T> clazz) {
Human human = null;
try {
human = (Human) Class.forName(clazz.getName()).newInstance();
} catch (Exception e) { //异常处理
System.out.println("人种产生错误");
}
return (T) human;
}
}
工厂具体的生产:
public class FactoryTest {
public static void main(String[] args) {
AbstractHumanFactory bagualu = new HunmanFactory();
Human blackMan = bagualu.createHuman(BlackHuman.class); //黑人诞生了
Human yellowMan = bagualu.createHuman(YelloHuman.class); //黄人诞生了
Human whiteMan = bagualu.createHuman(WhiteHuman.class); //白人诞生了
}
}
抽象工厂模式的实现:
不同的厂商分别生产各自的手机:
//其中的method()方法可看作提取出不同产品的共性,如手机都有类似的功能
interface IProductA {
public void method();
}
厂商1:
// 由于已经设计好A1由厂商1生产,故以下输出代码有“厂商x”
class ProductA1 implements IProductA {
public void method() {
System.out.println("厂商1 生产ProductA1 ...");
}
}
厂商2:
class ProductA2 implements IProductA {
public void method() {
System.out.println("厂商2 生产ProductA2 ...");
}
}
// 每一种牌子的产品生产工厂,即不同的厂商负责自己牌子产品的生产:
abstract class Factory1 {
abstract IProductA getProductA1();
}
abstract class Factory2 {
abstract IProductA getProductA2();
}
// 具体的工厂用来生产相关的产品
class ConcreteFactory1 extends Factory1 {
public IProductA getProductA1() {
return new ProductA1();
}
}
class ConcreteFactoryB extends Factory2 {
public IProductA getProductA2() {
return new ProductA2();
}
}
// 测试类
public class Client {
public static void main(String[] args) {
// 厂商1负责生产产品A1
Factory1 factory1 = new ConcreteFactory1();
IProductA productA1 = factory1.getProductA1();
productA1.method();
// 厂商2负责生产产品A2
Factory2 factory2 = new ConcreteFactoryB();
IProductA productA2 = factory2.getProductA2();
productA2.method();
}
}