欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

设计模式之工厂方法模式

程序员文章站 2024-01-05 19:29:46
...

一、什么是工厂方法模式?

             定义一个用于创建对象的接口,让子类决定实例化哪一个类

二、实现(采用设计模式之禅里女娲造人-白人、黑人、黄种人的故事)

1.工厂方法模式实现方式一

人类总称接口

public interface Human{
   //设置人种皮肤颜色
   public void getColor();
   //人会说话
   public void talk();

}

黑色人种(实现Human接口):

public class BlackHuman implements Human{
    //皮肤颜色
    public void getColor(){
        System.out.printLn("黑人皮肤是黑色的");
   }
    //
    public void talk(){
        System.out.printLn("黑人说话听不懂");
   }
}

黄色人种(实现Human接口):

public class YellowHuman implements Human{
    //皮肤颜色
    public void getColor(){
        System.out.printLn("黄色人种皮肤是黄色的");
   }
    //
    public void talk(){
        System.out.printLn("黄色人种说汉语");
   }
}

白色人种WhitHuman(实现Human接口):

 

 

抽象人类建造工厂:

public abstract class AbstractHuamnFactory{
     public abstract<T extends Human> T createHuman(class<T> c);

}

人类建造工厂(实现AbstractHuamnFactory类):

public class HumanFactoryextends AbstractHuamnFactory{
     public <T extends Human> T createHuman(class<T> c){
           //定义一个生产的人种
           Human human = null;
           try{
                //
                 human = (Human) Class.forName(c.getName()).newInstance();
              }catch (Exception e){
                     System.out.printLn("人种生成错误");
            }
          return (T) human;
  }
}

造人实现类:

public class NvWa{
        public static void main(String[] args){
               AbstractHumanFactory zaoren = new HumanFactory();
               //白人
               System.out.printLn("白色人种");
               Human whitHuman  = zaoren.createHuman(WhiteHuman.class);
               whitHuman.getColor();
               whitHuman.talk();
               
                //黑人
               System.out.printLn("\n--黑色人种--");
               Human blackHuman  = zaoren.createHuman(BlackHuman.class);
               blackHuman.getColor();
               blackHuman.talk();


                //黑人
               System.out.printLn("\n--黄色人种--");
               Human yellowHuman  = zaoren.createHuman(YellowHuman.class);
               yellowHuman.getColor();
               yellowHuman.talk();


        }
}


          

2.工厂方法模式实现方式二