zoukankan      html  css  js  c++  java
  • 设计模式之工厂方法模式

    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();
        }
        
    }

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

  • 相关阅读:
    C语言(1)
    ​ Markdown
    多功能嵌入式解码软件(4)
    多功能嵌入式解码软件(3)
    多功能嵌入式解码软件(2)
    STM32最小系统设计
    C#通过字符串分割字符串Split
    基于串口的SD_card系统
    直流无刷电机工作原理
    Java常用函数式接口--Consumer接口使用案例
  • 原文地址:https://www.cnblogs.com/hkdpp/p/9072411.html
Copyright © 2011-2022 走看看