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


    1、工厂模式

    以女娲造人为例,实现简单的工厂方法模式

    1、首先创建一个人类的接口,人类有肤色,会说话。

    2、创建三个人类的实现类。白种人,黑种人,黄种人。

    3、创建抽象人类工厂,添加造人的抽象方法,并约束其类型。

    4、创建人类创建工厂,继承抽象工厂,实现造人的逻辑。

    5、定义业务场景类,测试造人。

    package gov.mof.fasp2.gcfr.adjustoffset.adjust;
    
    
    /**
     * 人类总称
     * @author haokui
     *
     */
    interface Human {
        void getColor();//人又肤色
        void speak();//会说话
    }
    
    class Black implements Human {
    
        @Override
        public void getColor() {
            System.out.println("黑种人");
        }
    
        @Override
        public void speak() {
            System.out.println("黑种人说话");
            
        }
        
    }
    class White implements Human {
    
        @Override
        public void getColor() {
            System.out.println("白种人");
        }
    
        @Override
        public void speak() {
            System.out.println("白种人说话");
            
        }
        
    }
    class Yellow implements Human {
    
        @Override
        public void getColor() {
            System.out.println("黄种人");
        }
    
        @Override
        public void speak() {
            System.out.println("黄种人说话");
            
        }
    }
    /**
     * 抽象人类工厂
     * @author haokui
     *
     */
    abstract class AbstractHumanFactory {
        //这里采用泛型的作用,1、必须是Class类型,2、必须是Human的实现类
        abstract <T extends Human> T createHuman(Class<T> c);
    }
    class HumanFactory extends AbstractHumanFactory {
    
        @Override
        <T extends Human> T createHuman(Class<T> c) {
            Human h = null;
            try {
                h = (Human) Class.forName(c.getName()).newInstance();
            } catch (Exception e) {
                System.out.println("生产人种错误");
            } 
            return (T)h;
        }
    }
    /**
     * 业务场景类
     * @author haokui
     *
     */
    public class Main {
        public static void main(String[] args) {
            //创建一个人类工厂
            AbstractHumanFactory f = new HumanFactory();
            Human whiteHuman = f.createHuman(White.class);
            whiteHuman.getColor();
            whiteHuman.speak();
            System.out.println("======分割线=======");
            Human blackHuman = f.createHuman(Black.class);
            blackHuman.getColor();
            blackHuman.speak();
            System.out.println("======分割线=======");
            Human yellowHuman = f.createHuman(Yellow.class);
            yellowHuman.getColor();
            yellowHuman.speak();
        }
        
    }

    这只是简单的应用。当然也可以更复杂一些,比如造人要区分男性和女性,人的喜怒哀乐等等。

  • 相关阅读:
    Android sqlite日期存储
    Ubuntu10.04中间Leach协议一键安装
    Chapter 1 Securing Your Server and Network(1):选择SQL Server业务经理
    lua迭代器和仿制药for
    设定值范围+区间覆盖
    新手可以学习cocos2dx 3.0 组态(两)
    王立平--string.Empty
    Javascript操作阵列
    Dojo仪表板
    时间复杂度
  • 原文地址:https://www.cnblogs.com/hkdpp/p/9072411.html
Copyright © 2020-2023  润新知