zoukankan      html  css  js  c++  java
  • 工厂方法模式(选自《设计模式之禅》)

    人类接口:

    public interface Human {
        // 每个人种的皮肤都有相应的颜色
        public void getColor();
        // 人类会说话
        public void talk();
    }

    黑色人种:

    public class BlackHuman implements Human {
    
        @Override
        public void getColor() {
            System.out.println("黑色人种皮肤是黑色!");
        }
    
        @Override
        public void talk() {
            System.out.println("黑人会说话,一般人听不懂!");
        }
    
    }

    黄色人种:

    public class YellowHuman implements Human {
    
        @Override
        public void getColor() {
            System.out.println("黄色人种皮肤是黄色!");
        }
    
        @Override
        public void talk() {
            System.out.println("黄色人种会说话,一般说的都是双字节!");
        }
    
    }

    白色人种:

    public class WhiteHuman implements Human {
    
        @Override
        public void getColor() {
            System.out.println("白色人种皮肤是白色!");
        }
    
        @Override
        public void talk() {
            System.out.println("白色人种会说话,一般都是单字节!");
        }
    
    }

    抽象工厂类:

    public abstract class AbstractHumanFactory {
        public abstract <T extends Human> T createHuman(Class<T> c);
    }

    具体工厂类:

    public class HumanFactory extends AbstractHumanFactory {
    
        @Override
        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 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            
            AbstractHumanFactory yinYangLu = new HumanFactory();
            
            System.out.println("造出的第一批人是白色人种!");
            Human whilteHuman = yinYangLu.createHuman(WhiteHuman.class);
            whilteHuman.getColor();
            whilteHuman.talk();
            
            System.out.println("造出的第二批人是黑色人种!");
            Human blackHuman = yinYangLu.createHuman(BlackHuman.class);
            blackHuman.getColor();
            blackHuman.talk();
            
            System.out.println("造出的第三批人是黄色人种!");
            Human yellowHuman = yinYangLu.createHuman(YellowHuman.class);
            yellowHuman.getColor();
            yellowHuman.talk();
            
        }
    
    }
  • 相关阅读:
    C#中?、??与?:的使用
    循环的嵌套
    Linux中__init、__devinit等初始化宏
    AUPE学习第十章------信号
    C语言--const详解
    database is locked和SQLITE_BUSY
    vc6.0错误提示
    C/C++程序内存模型
    浅谈C中的malloc和free “来自bccn C语言论坛”
    Java几种内部类总结
  • 原文地址:https://www.cnblogs.com/jinglingJuly/p/3149993.html
Copyright © 2011-2022 走看看