• java设计模式之工厂方法模式


    1、定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

    2、代码示例

    /**
     * 抽象人类创造工厂
     */
    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 = (T) Class.forName(c.getName()).newInstance();
            } catch (Exception e) {
                System.out.println("人种生成错误! ");
            }
            return (T)human;
        }
    
    }
    /**
     * 人类总称
     */
    public interface Human {
    
        //每个人种的皮肤都有相应的颜色
        public void getColor();
        //人类会说话
        public void talk();
    }
    /**
     * 黑种人
     */
    public class BlackHuman implements Human {
    
        public void getColor(){
            System.out.println("黑色人种的皮肤颜色是黑色的! ");
        }
        public void talk() {
            System.out.println("黑人会说话, 一般人听不懂。 ");
        }
    
    }
    /**
     * 白种人
     */
    public class WhiteHuman implements Human {
    
        public void getColor(){
            System.out.println("白色人种的皮肤颜色是白色的! ");
        }
        public void talk() {
            System.out.println("白色人种会说话, 一般都是但是单字节。 ");
        }
    
    }
    /**
     * 黄种人
     */
    public class YellowHuman implements Human {
    
        public void getColor(){
            System.out.println("黄色人种的皮肤颜色是黄色的! ");
        }
        public void talk() {
            System.out.println("黄色人种会说话, 一般说的都是双字节。 ");
        }
    
    }
    /**
     * 女娲类
     */
    public class NvWa {
    
        public static void main(String[] args) {
            //声明阴阳八卦炉
            AbstractHumanFactory YinYangLu = new HumanFactory();
            //女娲第一次造人, 火候不足, 于是白人产生了
            System.out.println("--造出的第一批人是白色人种--");
            Human whiteHuman = YinYangLu.createHuman(WhiteHuman.class);
            whiteHuman.getColor();
            whiteHuman.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();
            
        }
    }
  • 相关阅读:
    进程与线程
    HTML——部分MP4在谷歌浏览器上无法播放
    Node——用http-proxy 做反向代理服务器
    jQuery——操作复选框(checkbox) attr checked不起作用
    ionic2——开发利器之Visual Studio Code 常用插件整理
    ionic2——开发利器之Visual Studio Code 常用快捷键
    ionic2常见问题——修改应用图标及添加启动画面(官方命令行工具自动生成)
    ionic2常见问题——启动后白屏问题
    ionic2常见问题——解决下载gradle-2.14.1-all.zip太慢或失败
    ionic2常见问题——cordova使用Gradle构建下载maven太慢,使用阿里云镜像
  • 原文地址:https://www.cnblogs.com/st-learning/p/13280394.html
Copyright © 2020-2023  润新知